Spring對事件驅動的支援
阿新 • • 發佈:2018-12-20
Java中自帶有對事件驅動的支援,但是大部分都是GUI以及 Swing框架方面的應用.Spring在Java的基礎上,擴充套件了對事件驅動的支援.
事件驅動程式設計四要素:
- 事件源--> ApplicationContext
- 事件--> ApplicationEvent, Object
- 事件消費者--> @EventLIstener, ApplicaionListener
- 事件通道--> SimpleApplicationEventMulticaster 事件廣播器
容器生命週期各個階段都會產生事件。
- ContextStartedEvent 容器啟動的時候觸發此事件
- ContextRefreshedEvent 容器重新整理的時候觸發此事件
- ContextClosedEvent 容器銷燬的時候觸發此事件
- ContextStoppedEvent 容器停止的時候觸發此事件
示例:
栗子: 這裡以註解的方式示例, 在訂單建立成功後傳送事件,觸發郵件傳送。其中OrderService
事件源
OrderServiceImpl.java @Autowired private OrderDao orderDao; @Autowired private ApplicationContext applicationContext; //這裡拿訂單作為栗子 private Order order; public void saveOrder(){ orderDao.saveOrder(order); ... applicationContext.publishEvent(order); }
事件
//Event作為儲存物件,這裡將Order作為Event
消費者
EmailServiceImpl.java
@EventListener//消費者註解
public void sendEmail(Order order){
//傳送郵件的邏輯省略
...
}
這樣, 在後期想要加入功能,訂單建立成功後,同時傳送簡訊. 這就簡單了,再寫一個監聽類SmsService即可.
SmsServiceImpl.java @EventListener//事件消費者註解 public void sendSMS(Order order){ //傳送簡訊的邏輯省略 ... }
事件通道(必須配置)
加入配置SimpleApplicationEventMulticaster和連線池的配置。就是2個Bean的配置,這裡省略。