Spring 的事件機制仿照 Windows 訊息模型:ApplicationEvent 如同訊息,ApplicationListener 如同訊息處理函數。流程為:定義事件 → 發布事件 → 定義監聽器 → 容器自動調度。
所有事件類別必須繼承 ApplicationEvent(繼承 EventObject),核心欄位:
source:事件來源物件,建構子傳入。timestamp:事件發生時間(毫秒),建構子自動擷取 System.currentTimeMillis(),可透過 getTimestamp() 取得。public abstract class ApplicationEvent extends EventObject {
private final long timestamp;
public ApplicationEvent(Object source) {
super(source);
this.timestamp = System.currentTimeMillis();
}
public long getTimestamp() { return timestamp; }
}
單一方法 onApplicationEvent(ApplicationEvent event)。容器發布事件時,會遍歷所有已註冊的監聽器 Bean 呼叫此方法。同一監聽器會收到所有型別的事件,因此實作時必須先判斷 event instanceof YourEvent 再處理。
public class MyCustomEvent extends ApplicationEvent {
private String message;
public MyCustomEvent(Object source, String message) {
super(source);
this.message = message;
}
public String getMessage() { return message; }
}
監聽器中針對 MyCustomEvent 處理業務邏輯。後續文章將示範完整發布與監聽流程。