Acara sebenarnya adalah badan mesej yang ingin kami hantar apa yang hendak digunakan, tambah medan yang diperlukan. Mari kita berikan kes.
package com.lsqingfeng.springboot.applicationEvent; import lombok.Getter; import lombok.Setter; import org.springframework.context.ApplicationEvent; /** * @className: MyApplicationEvent * @description: 事件封装 * @author: sh.Liu * @date: 2022-03-23 14:41 */ @Getter @Setter @ToString public class MyApplicationEvent extends ApplicationEvent { private Integer age; private String name; /** * 需要重写构造方法 * @param source * @param name * @param age */ public MyApplicationEvent(Object source, String name, Integer age) { super(source); this.name = name; this.age = age; } }
Pendengar adalah setara dengan pengguna MQ kami Apabila ada masa untuk menolaknya, kod pendengar boleh dilaksanakan. Di sini kami menetapkan jenis acara kami melalui generik.
package com.lsqingfeng.springboot.applicationEvent; import org.springframework.context.ApplicationListener; import org.springframework.stereotype.Component; /** * @className: MyApplicationEventListener * @description:事件监听器 * @author: sh.Liu * @date: 2022-03-23 14:50 */ @Component public class MyApplicationEventListener implements ApplicationListener<MyApplicationEvent> { @Override public void onApplicationEvent(MyApplicationEvent event) { System.out.println("收到消息:" + event); } }
Acara Push memerlukan penggunaan ApplicationEventPublisher. Objek ini sudah berada di dalam bekas apabila bekas Spring dimuatkan. Jadi kita boleh menyuntiknya secara langsung atau menggunakan ApplicationContext, kerana ApplicationContext sendiri mewarisi ApplicationEventPublisher. Mari sahkan melalui Pengawal.
package com.lsqingfeng.springboot.controller; import com.lsqingfeng.springboot.applicationEvent.MyApplicationEvent; import com.lsqingfeng.springboot.base.Result; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** * @className: ApplicationEventController * @description: * @author: sh.Liu * @date: 2022-03-23 15:21 */ @RestController @RequestMapping("event") public class ApplicationEventController { @Autowired private ApplicationContext applicationContext; @RequestMapping("/push") public Result pushEvent(){ MyApplicationEvent myApplicationEvent = new MyApplicationEvent(this,"zhangsan", 10); applicationContext.publishEvent(myApplicationEvent); return Result.success(); } @RequestMapping("/push3") public Result pushEvent2(){ applicationContext.publishEvent("大家好"); return Result.success(); } }
Kami mentakrifkan dua kaedah tolak. Satu menolak jenis MyApplicationEvent kami, dan kaedah lain menolak rentetan.
Apabila kami memanggil kaedah pertama, konsol boleh mencetak maklumat data yang kami tolak.
Apabila memanggil rentetan tekan, pendengar kami tidak akan melaksanakan Sebabnya ialah pemintas kami telah menambah MyApplicationEvent, yang bermaksud ia hanya akan mendengar jenis MyApplicationEvent mesej. Jenis mesej lain tidak akan didengari.
Apakah kesannya jika kita membuang ubat generik?
Setiap tekan akan menghantar dua mesej (mungkin ada mekanisme dalaman, saya tidak kisah), tetapi kedua-duanya dicetak, menunjukkan bahawa jika generik tidak ditambah, tidak tidak kira siapa yang menolak , mesej boleh diterima di sini.
Selain membangunkan pendengar dengan melaksanakan antara muka di atas, kami juga boleh melaksanakannya melalui anotasi adalah seperti berikut.
package com.lsqingfeng.springboot.applicationEvent; import org.springframework.context.event.EventListener; import org.springframework.stereotype.Component; /** * @className: MyApplicationEventListener2 * @description: 注解实现监听器 * @author: sh.Liu * @date: 2022-03-23 15:56 */ @Component public class MyApplicationEventListener2 { @EventListener public void onEvent(MyApplicationEvent event){ System.out.println("收到消息2:" + event); } }
Anotasi @EventListener ditambahkan di sini untuk menyatakan bahawa ini adalah pendengar. Nama kaedah adalah sewenang-wenangnya, dan parameter dalam kaedah mewakili jenis acara yang akan dipantau.
Panggil kaedah tolak sekali lagi:
Didapati data kedua-dua pendengar akan dicetak. Setiap orang harus memberi perhatian kepada ciri ini.
Atas ialah kandungan terperinci Cara menggunakan ApplicationEvent dan ApplicationListener dalam SpringBoot. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!