Spring 事件驅動模型概念
Spring 事件驅動模型就是觀察者模式很經典的一個應用,我們可以通過Spring 事件驅動模型來完成程式碼的解耦。
三角色
Spring 事件驅動模型或者說觀察者模式需要三個類角色來支撐完成。分表是:
- 事件——
ApplicationEvent
- 事件監聽者——
ApplicationListener
- 事件釋出者——
ApplicationEventPublisher
,ApplicationContext
步驟
- 定義一個事件: 實現一個繼承自
ApplicationEvent
,並且寫相應的建構函式; - 定義一個事件監聽者:實現
ApplicationListener
介面,重寫onApplicationEvent()
方法; - 使用事件釋出者釋出訊息: 可以通過
ApplicationEventPublisher
的publishEvent()
方法釋出訊息。
程式碼示例
// 定義一個事件,繼承自ApplicationEvent並且寫相應的建構函式 注意這個事件是給釋出者建立出來傳送事件的,
// 所有不能加 @Component
public class MyApplicationEvent extends ApplicationEvent {
private String message;
public MyApplicationEvent(Object source,String message) {
super(source);
this.message = message;
}
public String getMessage() {
return message;
}
}
//// 釋出事件,我們依賴於spring自帶的applicationContext來發布事件,applicationContext實現了ApplicationEventPublisher 介面
@Component
public class MyApplicationEventPublisher {
@Autowired
ApplicationContext applicationContext;
public void publish(String message) {
applicationContext.publishEvent(new MyApplicationEvent(this, message));
}
}
//// 定義一個事件監聽者,實現ApplicationListener介面,重寫 onApplicationEvent() 方法
//注意泛型列是監聽的事件類名
@Component
public class MyApplicationListener implements ApplicationListener<MyApplicationEvent> {
@Override
public void onApplicationEvent(MyApplicationEvent myApplicationEvent) {
System.out.println(myApplicationEvent.getMessage());
}
}
//測試類
@RunWith(SpringRunner.class)
@SpringBootTest
@Slf4j
public class EventTest {
@Autowired
MyApplicationEventPublisher myApplicationEventPublisher;
@Test
public void test(){
myApplicationEventPublisher.publish("hello world");
}
//hello world
}