Cara menggunakan ApplicationEvent berdasarkan SpringBoot
1. Senario kes
1 Mulakan permintaan yang tenang dan terbitkan acara yang berbeza mengikut parameter permintaan.
2. Pendengar acara, selepas mendengar acara, lakukan operasi yang telah ditetapkan.
3. Contoh ini ialah mekanisme pemprosesan penyegerakan acara, iaitu selepas acara diterbitkan, acara akan dipantau secara serentak.
2. Gunakan kelas
org.springframework.context.ApplicationEvent, objek acara musim bunga.
org.springframework.context.ApplicationListener, antara muka pendengar acara.
org.springframework.context.ApplicationEventPublisher, antara muka penerbit acara.
3. Kod
1. Objek acara
Objek acara melaksanakan ApplicationEvent.
1.1 ExampleApplicationEvent
ExampleApplicationEvent, kelas abstrak. Warisi ApplicationEvent dan sesuaikan serta kembangkan beberapa sifat yang diperlukan dalam perkhidmatan mikro.
public abstract class ExampleApplicationEvent extends ApplicationEvent { private static final String eventSource = "Example"; private String eventType = null; private Object eventData = null; public ExampleApplicationEvent(Object eventData) { super(eventSource); this.eventData = eventData; } public ExampleApplicationEvent(Object eventData, String eventType) { super(eventSource); this.eventData = eventData; this.eventType = eventType; } public String getEventType() { return eventType; } public Object getEventData() { return eventData; } }
1.2 ExampleLocalApplicationEvent
ExampleLocalApplicationEvent ialah kelas pelaksanaan kelas abstrak ExampleApplicationEvent, di mana anda boleh mengembangkan atribut mengikut keperluan.
public class ExampleLocalApplicationEvent extends ExampleApplicationEvent { public ExampleLocalApplicationEvent(Object eventData) { super(eventData); } public ExampleLocalApplicationEvent(Object eventData, String eventType) { super(eventData, eventType); } }
1.3 EventTypeEnum
EventTypeEnum, penghitungan jenis acara tersuai, dikembangkan atas permintaan.
public enum EventTypeEnum { CHANGE("change", "变更事件"), ADD("add", "新增事件"); private String id; private String name; public String getId() { return id; } public String getName() { return name; } EventTypeEnum(String id, String name) { this.id = id; this.name = name; } public static EventTypeEnum getEventTypeEnum(String id) { for (EventTypeEnum var : EventTypeEnum.values()) { if (var.getId().equalsIgnoreCase(id)) { return var; } } return null; } }
2. Pendengar acara
Pendengar acara termasuk antara muka dan kelas abstrak.
2.1 IEventListener
IEventListener, antara muka, mewarisi antara muka ApplicationListener.
@SuppressWarnings("rawtypes") public interface IEventListener extends ApplicationListener { }
2.2 AbstractEventListener
AbstractEventListener, kelas abstrak, melaksanakan antara muka IEventListener. Dan menyediakan kaedah abstrak untuk memudahkan sambungan kelas dan penyahgandingan kod.
public abstract class AbstractEventListener implements IEventListener { @Override public void onApplicationEvent(ApplicationEvent event){ if(!(event instanceof ExampleApplicationEvent)){ return; } ExampleApplicationEvent exEvent = (ExampleApplicationEvent) event; try{ onExampleApplicationEvent(exEvent); }catch (Exception e){ e.printStackTrace(); } } protected abstract void onExampleApplicationEvent(ExampleApplicationEvent event); }
2.3 OrderEventListener
OrderEventListener, melaksanakan kelas abstrak AbstractEventListener. Ia adalah kelas perniagaan untuk mendengar acara dan memprosesnya.
@Slf4j @Component public class OrderEventListener extends AbstractEventListener { @Override protected void onExampleApplicationEvent(ExampleApplicationEvent event) { log.info("OrderEventListener->onSpApplicationEvent,监听事件."); Object eventData = event.getEventData(); log.info("事件类型: " + EventTypeEnum.getEventTypeEnum(event.getEventType())); log.info("事件数据: " + eventData.toString()); } }
3. Penerbit acara
Pendengar acara termasuk antara muka dan kelas pelaksanaan.
3.1 IEventPublisher
IEventPublisher, antara muka penerbitan acara tersuai untuk memudahkan fungsi dan sifat lanjutan.
public interface IEventPublisher { boolean publish(ExampleApplicationEvent event); }
3.2 LocalEventPublisher
LocalEventPublisher, kelas pelaksanaan penerbitan acara, kelas ini menggunakan @Component, bekas IOC spring akan memuatkan kelas ini. Kelas ini memanggil publishEvent of ApplicationEventPublisher untuk menerbitkan acara.
@Slf4j @Component("localEventPublisher") public class LocalEventPublisher implements IEventPublisher { @Override public boolean publish(ExampleApplicationEvent event) { try{ log.info("LocalEventPublisher->publish,发布事件."); log.info("事件类型: " + EventTypeEnum.getEventTypeEnum(event.getEventType())); log.info("事件数据: " + event.getEventData().toString()); SpringUtil.getApplicationContext().publishEvent(event); }catch (Exception e){ log.info("事件发布异常."); e.printStackTrace(); return false; } return true; } }
4. Permintaan yang tenang mencetuskan acara
Gunakan permintaan yang tenang untuk mencetuskan acara.
4.1 EventController
EventController, menerima permintaan Restful.
@Slf4j @RestController @RequestMapping("/event") public class EventController { @Autowired private LocalEventPublisher eventPublisher; @PostMapping("/f1") public Object f1(@RequestBody Object obj) { log.info("EventController->f1,接收参数,obj = " + obj.toString()); Map objMap = (Map) obj; OrderInfo orderInfo = new OrderInfo(); orderInfo.setUserName((String) objMap.get("userName")); orderInfo.setTradeName((String) objMap.get("tradeName")); orderInfo.setReceiveTime(DateUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss")); String flag = (String) objMap.get("flag"); if (StringUtils.equals("change", flag)) { eventPublisher.publish(new ExampleLocalApplicationEvent(orderInfo, EventTypeEnum.CHANGE.getId())); } else if (StringUtils.equals("add", flag)) { eventPublisher.publish(new ExampleLocalApplicationEvent(orderInfo, EventTypeEnum.ADD.getId())); } else { eventPublisher.publish(new ExampleLocalApplicationEvent(orderInfo)); } log.info("EventController->f1,返回."); return ResultObj.builder().code("200").message("成功").build(); } }
4.2 OrderInfo
OrderInfo, objek data, dihantar dalam objek acara.
@Data @NoArgsConstructor public class OrderInfo { private String userName; private String tradeName; private String receiveTime; }
4.3 ResultObj
ResultObj, restful mengembalikan objek biasa.
@Data @NoArgsConstructor @AllArgsConstructor @Builder public class ResultObj { private String code; private String message; }
5 Ujian
5.1 Minta maklumat
Permintaan URL: http://127.0.0.1:8080/server/event/f1
Masukkan Rujukan:
{ "userName": "HangZhou", "tradeName": "Vue进阶教程", "flag": "add" }
Nilai pulangan:
{ "code": "200", "message": "成功" }
5.2 Log
Log keluaran:
Atas ialah kandungan terperinci Cara menggunakan ApplicationEvent berdasarkan SpringBoot. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

MinGW - GNU Minimalis untuk Windows
Projek ini dalam proses untuk dipindahkan ke osdn.net/projects/mingw, anda boleh terus mengikuti kami di sana. MinGW: Port Windows asli bagi GNU Compiler Collection (GCC), perpustakaan import yang boleh diedarkan secara bebas dan fail pengepala untuk membina aplikasi Windows asli termasuk sambungan kepada masa jalan MSVC untuk menyokong fungsi C99. Semua perisian MinGW boleh dijalankan pada platform Windows 64-bit.

Dreamweaver CS6
Alat pembangunan web visual

mPDF
mPDF ialah perpustakaan PHP yang boleh menjana fail PDF daripada HTML yang dikodkan UTF-8. Pengarang asal, Ian Back, menulis mPDF untuk mengeluarkan fail PDF "dengan cepat" dari tapak webnya dan mengendalikan bahasa yang berbeza. Ia lebih perlahan dan menghasilkan fail yang lebih besar apabila menggunakan fon Unicode daripada skrip asal seperti HTML2FPDF, tetapi menyokong gaya CSS dsb. dan mempunyai banyak peningkatan. Menyokong hampir semua bahasa, termasuk RTL (Arab dan Ibrani) dan CJK (Cina, Jepun dan Korea). Menyokong elemen peringkat blok bersarang (seperti P, DIV),

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa