Python知識分享網(wǎng) - 專業(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)擊沒反應(yīng),多刷新兩次就OK!)

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

 

 

 

資料內(nèi)容:

 

1. 簡介
 

1.1 ApplicationEvent
 

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

 

1.2 ApplicationListener
 

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

 

1.3 @EventListener
 

@EventListener 是一個 Spring 框架提供的注解,用于實(shí)現(xiàn)事件驅(qū)動編程。它允許定義事件和事件監(jiān)聽器,
當(dāng)事件被觸發(fā)時,所有注冊監(jiān)聽該事件的監(jiān)聽器將會被調(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)聽事件
 

2.1.1 使用ApplicationListener
 

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

 

2.1.2 使用@EventListener
 

在該類中定義一個帶有 @EventListener 注解的方法。這個方法將在事件被觸發(fā)時自動執(zhí)行。
如果希望通過一定的條件對事件進(jìn)行過濾,可以使用 @EventListener 的 condition 屬性。以下實(shí)例中只有
event 的 message屬性是 my-event 時才會進(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());
}
}