Spring中的事件講解(Application Event)
1 Spring事件簡介
當Spring
的事件(Application Event
)為Bean
和Bean
之間的訊息同學提供了支援。當一個Bean
處理完成一個任務之後,希望另外一個Bean
知道並能做相應的處理,這時我們就需要讓另外一個Bean
監聽當前Bean
所發生的事件
Spring
的事件需要遵循如下流程:
- 自定義事件,繼承
ApplicationEvent
- 定義事件監聽器,實現
ApplicationListener
- 使用容器釋出事件
2 Demo示例
2.1 pom.xml檔案
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>cn.jzh</groupId>
<artifactId>TestDemo</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.9.RELEASE</version>
<scope>compile</scope>
</dependency>
</dependencies>
</project>
2.2 自定義事件
package cn.jzh.event;
import org.springframework.context.ApplicationEvent;
/**
* 自定義的spring事件
*/
public class DemoEvent extends ApplicationEvent {
private String msg;
public DemoEvent(Object source,String msg) {
super(source);
this.msg = msg;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
}
2.3 事件監聽器
package cn.jzh.event;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;
/**
* 監聽事件的實現類
*/
@Component
public class DemoListener implements ApplicationListener<DemoEvent> {//實現ApplicationListener介面,並指定監聽的事件型別
@Override
public void onApplicationEvent(DemoEvent event) {//使用onApplicationEvent方法對訊息進行接受處理
String msg = event.getMsg();
System.out.println("DemoListener獲取到了監聽訊息:"+msg);
}
}
2.4 事件釋出類
package cn.jzh.event;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Component;
/**
* 釋出事件
*/
@Component
public class DemoPublisher {
@Autowired
private ApplicationContext applicationContext;//注入ApplicationContext用來發布事件
public void publish(String msg){
applicationContext.publishEvent(new DemoEvent(this,msg));//使用ApplicationContext物件的publishEvent釋出事件
}
}
2.5 配置類
配置類中沒有具體的程式碼邏輯注意作用是為了能掃描到相應的使用註解的類
package cn.jzh.event;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;
@Configuration
@ComponentScan("cn.jzh.event")
public class EventConfig {
}
2.6 啟動測試
package cn.jzh.event;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class App {
public static void main(String[] args) {
//使用AnnotationConfigApplicationContext讀取配置EventConfig類,EventConfig類讀取了使用註解的地方
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(EventConfig.class);
DemoPublisher publish = context.getBean(DemoPublisher.class);
publish.publish("你好");
context.close();
}
}
相關文章
- Spring Boot 之事件(Event)Spring Boot事件
- Js 的事件迴圈(Event Loop)機制以及例項講解JS事件OOP
- Spring Boot(三):Spring Boot中的事件的使用 與Spring Boot啟動流程(Event 事件 和 Listeners監聽器)Spring Boot事件
- JS中event事件JS事件
- node中的事件環(Event Loop)事件OOP
- js中事件物件eventJS事件物件
- Spring Boot 實現非同步事件EventSpring Boot非同步事件
- Laravel 中的 Event 和事件的概念Laravel事件
- 瀏覽器event loop和node的event loop講解瀏覽器OOP
- 詳解 Solidity 事件Event - 完全搞懂事件的使用Solid事件
- nodejs中的事件迴圈 - Event LoopNodeJS事件OOP
- MySQL中的事件排程器EVENTMySql事件
- SAP UI5 ManagedObject 的 Event 講解UIObject
- spring-event-事件監聽機制實現Spring事件
- Tomcat與Spring中的事件機制詳解TomcatSpring事件
- mysql 事件 eventMySql事件
- Dynamics 365中的事件框架與事件執行管道(Event execution pipeline)事件框架
- 你真的瞭解Event Loop(事件環)嗎?OOP事件
- freeswitch的event事件處理事件
- 技術分享:NodeJS中的Events(事件觸發器)講解NodeJS事件觸發器
- Tkinter (44) 事件 Event事件
- Laravel使用event事件Laravel事件
- js 在瀏覽器中的event loop事件佇列JS瀏覽器OOP事件佇列
- Oracle 19c中的等待事件分類 Event WaitsOracle事件AI
- 【事件中心 Azure Event Hub】Event Hub日誌種發現的錯誤資訊解讀事件
- Spring中的事務提交事件Spring事件
- spring — Spring中的事件驅動機制解析Spring事件
- MySQL入門--EVENT(事件)MySql事件
- 事件迴圈(event loop)事件OOP
- SAP CRM和Cloud for Customer中的Event handler(事件處理器)Cloud事件
- Laravel event 事件使用中 記錄的一個小問題Laravel事件
- 理解瀏覽器和nodeJs中的事件迴圈(Event Loop)瀏覽器NodeJS事件OOP
- python3執行緒中的事件Event怎麼用?Python執行緒事件
- Spring事件機制詳解Spring事件
- spring event機制Spring
- Spring Boot整合 Geodesy講解Spring Boot
- JavaScript基礎之事件eventJavaScript事件
- JS 事件機制 Event LoopJS事件OOP