資料內(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());
}
}