什麼是Spring事件?
Spring 事件是Spring 框架中的核心模組之一,可以透過事件來實現2個動作之間的連線。舉個例子,我去銀行取錢,我先輸入銀行賬號、再輸入銀行密碼,密碼正確我們才能取到錢。如果把這2個動作看做一個事件,可以理解為驗證賬號、驗證密碼,兩個動作都通過了,才進行下一步。
驗證密碼的動作是比較耗時的,可以透過事件來進行非同步驗證,用方法替代為 checkUserName(String username),然後再checkPassWord(String pwd);
寫一下虛擬碼:
public boolean login(String username,String pwd){
checkUserName(username);
// 使用者名稱存在後,再進行下一步。
checkPassWord(username,pwd);
return true;
}
事件的用法
上述的動作換成事件,驗證完使用者名稱後就要驗證密碼,這相當於是一個連貫的動作。
public boolean login(String username,String pwd){
checkUserName(username);
publishCheckPwdEvent(username, pwd);
}
接著需要在checkUserName後釋出一個事件,使用ApplicationContext介面publishEvent()方法進行釋出事件。
public class EventPublish {
private final ApplicationContext applicationContext;
@Autowired
public EventPublish(ApplicationContext applicationContext) {
this。applicationContext = applicationContext;
}
public void publishEvent(String message) {
System。out。println(“釋出事件。。。”);
applicationContext。publishEvent(new Event(this, message));
}
}
然後我們可以自定一個監聽器。實現ApplicationListener介面,重寫該介面下的onApplicationContext()方法。
public class EventListener implements ApplicationListener
@Override
public void onApplicationEvent(Event event) {
String msg = event。getEventMessage();
System。out。println(“監聽器一收到訊息:” + msg);
//解析event物件,拿到usernam和password後進行下一步驗證。
valiadate(event。getUserName(),event。getPwd());
}
}
如果需要非同步,可以在方法上新增@Async註解
總結
上述簡單介紹了Spring時間的用法,需要記住一個重要的介面ApplicationListener和applicationContext介面的publishEvent()方法,前者用來監聽,後者用來發布。