TS 從入門到深度掌握,晉級(jí)TypeScript高手-結(jié)廬在人境,而無(wú)車馬喧
深化了解Spring的事情通知機(jī)制
TS 從入門到深度掌握,晉級(jí)TypeScript高手
download:https://www.51xuebc.com/thread-541-1-1.html
事情通知機(jī)制的原理
?? Spring的事情通知機(jī)制是基于察看者形式完成的,主要分為三個(gè)中心元素:事情、監(jiān)聽(tīng)器和事情發(fā)布器。
事情(ApplicationEvent)
?? Spring的事情是盤繞ApplicationEvent類完成的,該類繼承了JDK提供的EventObject籠統(tǒng)類,能夠用來(lái)表示事情的數(shù)據(jù)。在Spring中,假如要自定義事情,只需求繼承ApplicationEvent類即可,并在子類中添加自定義的屬性或辦法。例如,能夠定義一個(gè)MyEvent類來(lái)表示自定義事情,它可能包含一些用于處置的數(shù)據(jù)。
監(jiān)聽(tīng)器(ApplicationListener)
?? 在Spring中,能夠經(jīng)過(guò)完成ApplicationListener接口來(lái)定義事情監(jiān)聽(tīng)器,ApplicationListener接口只定義了一個(gè)辦法onApplicationEvent,該辦法會(huì)在某個(gè)事情發(fā)作時(shí)被調(diào)用,能夠在其中處置事情內(nèi)容。除此之外,Spring還提供了一個(gè)更煩瑣的辦法,就是運(yùn)用@EventListener注解,只需求在完成辦法上加上該注解即可。
事情發(fā)布器(ApplicationContext)
?? Spring容器是事情的發(fā)布者,是指在ApplicationContext中,假如某個(gè)事情發(fā)作了,容器會(huì)自動(dòng)調(diào)用對(duì)應(yīng)的監(jiān)聽(tīng)器。詳細(xì)完成是經(jīng)過(guò)一個(gè)事情播送器完成的。其中心是運(yùn)用了Spring的事情發(fā)布機(jī)制ApplicationEventMulticaster類,它擔(dān)任維護(hù)一切的監(jiān)聽(tīng)器,并經(jīng)過(guò)事情播送器將事情通知到一切的監(jiān)聽(tīng)器中。
?? 在ApplicationContext啟動(dòng)時(shí),會(huì)自動(dòng)創(chuàng)立該類的實(shí)例,并注冊(cè)到容器中作為一個(gè)單例bean,在容器關(guān)閉時(shí)銷毀??偟膩?lái)說(shuō),Spring事情通知機(jī)制經(jīng)過(guò)定義事情、監(jiān)聽(tīng)器和事情發(fā)布器來(lái)完成松耦合的通訊,降低了組件之間的依賴性,使得應(yīng)用程序愈加靈敏。
事情通知機(jī)制的運(yùn)用辦法
?? Spring事情的運(yùn)用辦法十分簡(jiǎn)單,能夠經(jīng)過(guò)下列三個(gè)步驟來(lái)完成:
定義事情類:開(kāi)發(fā)人員能夠自定義事情對(duì)象,繼承Spring的ApplicationEvent類,完成事情的結(jié)構(gòu)和處置邏輯。
定義事情監(jiān)聽(tīng)器:開(kāi)發(fā)人員能夠經(jīng)過(guò)完成ApplicationListener接口,并在對(duì)應(yīng)類中定義onApplicationEvent辦法處置接納的事情,完成事情監(jiān)聽(tīng)器的功用。
注冊(cè)監(jiān)聽(tīng)器:開(kāi)發(fā)人員能夠經(jīng)過(guò)在配置文件中配置或運(yùn)用@EventListener注解的方式向Spring容器注冊(cè)事情監(jiān)聽(tīng)器,以便Spring管理監(jiān)聽(tīng)器的生命周期以及自動(dòng)進(jìn)運(yùn)用。
以下是一個(gè)簡(jiǎn)單的 Spring 事情通知機(jī)制的代碼示例:
首先定義事情類 MyEvent.java:
import org.springframework.context.ApplicationEvent;
public class MyEvent extends ApplicationEvent {
private String message;
public MyEvent(Object source, String message) {
super(source);
this.message = message;
}
public String getMessage() {
return message;
}
}
定義事情監(jiān)聽(tīng)器 MyListener.java:
import org.springframework.context.ApplicationListener;
@Component
public class MyListener implements ApplicationListener {
@Override
public void onApplicationEvent(MyEvent myEvent) {
System.out.println("Received MyEvent: " + myEvent.getMessage());
}
}
定義事情發(fā)布類 MyPublisher.java:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.stereotype.Component;
@Component
public class MyPublisher {
@Autowired
private ApplicationEventPublisher publisher;
public void publish() {
MyEvent event = new MyEvent(this, "Hello, world!");
publisher.publishEvent(event);
}
}
?? 當(dāng)Spring運(yùn)轉(zhuǎn)后,在任何中央調(diào)用myPublisher.publish(),將輸出 "Received MyEvent: Hello, world!",表示自定義事情已勝利被監(jiān)聽(tīng)器接納。
總結(jié)
?? Spring的事情通知機(jī)制是一種靈敏便當(dāng)?shù)慕M件通訊方式,在不同的業(yè)務(wù)場(chǎng)景中都有普遍的應(yīng)用。經(jīng)過(guò)本文的引見(jiàn),我們能夠理解到Spring事情通知機(jī)制的原理、運(yùn)用辦法和代碼示例,以及將其與其他Spring組件集成的一些技巧。希望這篇文章可以協(xié)助大家更深化天文解Spring框架。