Spring 事件整理

什麼是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()方法,前者用來監聽,後者用來發布。