Python知識(shí)分享網(wǎng) - 專(zhuān)業(yè)的Python學(xué)習(xí)網(wǎng)站 學(xué)Python,上Python222
SpringBoot事件發(fā)布及訂閱詳解含代碼示例(值得珍藏) PDF 下載
匿名網(wǎng)友發(fā)布于:2024-02-06 10:47:47
(侵權(quán)舉報(bào))
(假如點(diǎn)擊沒(méi)反應(yīng),多刷新兩次就OK!)

SpringBoot事件發(fā)布及訂閱詳解含代碼示例(值得珍藏) PDF 下載  圖1

 

 

 

資料內(nèi)容:

 

1. 簡(jiǎn)介
 

1.1 ApplicationEvent
 

ApplicationEvent 是 Spring 框架中的一個(gè)重要概念,它是基于觀察者模式的事件。簡(jiǎn)單來(lái)說(shuō),它是一個(gè)用
于在 Spring 應(yīng)用程序上下文中傳播信息的對(duì)象。當(dāng)某個(gè)特定的事件發(fā)生時(shí),ApplicationEvent 對(duì)象會(huì)被創(chuàng)
建并發(fā)布到 ApplicationContext 中,所有注冊(cè)監(jiān)聽(tīng)該事件的監(jiān)聽(tīng)器就會(huì)收到通知并執(zhí)行相應(yīng)的操作。
ApplicationEvent 是一個(gè)泛型類(lèi),可以用來(lái)傳遞任何類(lèi)型的數(shù)據(jù)。當(dāng)事件被發(fā)布時(shí),所有注冊(cè)的監(jiān)聽(tīng)器將會(huì)
接收到一個(gè) ApplicationEvent 對(duì)象,通過(guò)該對(duì)象的 getSource() 方法可以獲取到事件源,即觸發(fā)事件的組
件。同時(shí),通過(guò) getTimestamp() 方法可以獲取到事件發(fā)生的時(shí)間戳。

 

1.2 ApplicationListener
 

ApplicationListener 是 Spring 框架中的一個(gè)接口,用于監(jiān)聽(tīng)容器中發(fā)布的事件。這個(gè)接口定義了一個(gè)方
法:void onApplicationEvent(E event),當(dāng)某個(gè) ApplicationEvent 被發(fā)布時(shí),所有注冊(cè)監(jiān)聽(tīng)該事件的
ApplicationListener 將會(huì)被調(diào)用。
ApplicationListener 是一個(gè)泛型接口,其參數(shù) E 代表事件的類(lèi)型。開(kāi)發(fā)者需要實(shí)現(xiàn)這個(gè)接口,并指定要監(jiān)聽(tīng)
的事件類(lèi)型。例如,如果要監(jiān)聽(tīng) CustomEvent 類(lèi)型的事件,可以創(chuàng)建一個(gè)實(shí)現(xiàn)了 ApplicationListener 接口
的類(lèi)。

 

1.3 @EventListener
 

@EventListener 是一個(gè) Spring 框架提供的注解,用于實(shí)現(xiàn)事件驅(qū)動(dòng)編程。它允許定義事件和事件監(jiān)聽(tīng)器,
當(dāng)事件被觸發(fā)時(shí),所有注冊(cè)監(jiān)聽(tīng)該事件的監(jiān)聽(tīng)器將會(huì)被調(diào)用。
public class MyCustomEvent extends ApplicationEvent {
private String message;
public MyCustomEvent(Object source, String message) {
super(source);
this.message = message;
}
public String getMessage() {
return message;
}
}
public interface ApplicationListener<E extends ApplicationEvent> {
void onApplicationEvent(E event);
}

 

2. 使用示例
 

2.1 監(jiān)聽(tīng)事件
 

2.1.1 使用ApplicationListener
 

要監(jiān)聽(tīng)事件,需要實(shí)現(xiàn) ApplicationListener 接口,并指定要監(jiān)聽(tīng)的事件類(lèi)型。然后,可以將這個(gè)監(jiān)聽(tīng)器
注冊(cè)到 ApplicationContext 中。

 

2.1.2 使用@EventListener
 

在該類(lèi)中定義一個(gè)帶有 @EventListener 注解的方法。這個(gè)方法將在事件被觸發(fā)時(shí)自動(dòng)執(zhí)行。
如果希望通過(guò)一定的條件對(duì)事件進(jìn)行過(guò)濾,可以使用 @EventListener 的 condition 屬性。以下實(shí)例中只有
event 的 message屬性是 my-event 時(shí)才會(huì)進(jìn)行調(diào)用。
@Component
public class MyCustomEventListener implements ApplicationListener<MyCustomEvent> {
@Override
public void onApplicationEvent(MyCustomEvent event) {
System.out.println("Received event: " + event.getMessage());
}
}
@Component
public class MyCustomListener {
@EventListener
public void handleMyCustomEvent(MyCustomEvent event) {
System.out.println("Received event: " + event.getMessage());
}
}