1. 程式人生 > >Spring對事件驅動的支援

Spring對事件驅動的支援

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的配置,這裡省略。