首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Spring 事件機制實戰:ApplicationEvent 與 ApplicationListener 應用模式

     編輯:Java 相關知識

核心介面與流程

  1. 自訂事件:繼承 ApplicationEvent,攜帶業務資料。
  2. 發布者:實作 ApplicationContextAware,取得 ApplicationContext 呼叫 publishEvent()。
  3. 監聽者:實作 ApplicationListener,覆寫 onApplicationEvent() 過濾處理。

事件類別

public class MessageEvent extends ApplicationEvent {
    private String message;
    public MessageEvent(Object source, String message) {
        super(source);
        this.message = message;
    }
    public String getMessage() { return message; }
    public void setMessage(String message) { this.message = message; }
}

發布者

public class Publisher implements ApplicationContextAware {
    private ApplicationContext context;

    @Override
    public void setApplicationContext(ApplicationContext ctx) throws BeansException {
        this.context = ctx;
    }

    public void publish(String message) {
        context.publishEvent(new MessageEvent(this, message));
    }

    public static void main(String[] args) {
        ApplicationContext ctx = new FileSystemXmlApplicationContext("src/applicationContext.xml");
        Publisher pub = (Publisher) ctx.getBean("publisher");
        pub.publish("Hello World!");
        pub.publish("The quick brown fox jumped over the lazy dog");
    }
}

監聽者

public class MessageEventListener implements ApplicationListener {
    @Override
    public void onApplicationEvent(ApplicationEvent event) {
        if (event instanceof MessageEvent) {
            MessageEvent me = (MessageEvent) event;
            System.out.println("Received: " + me.getMessage());
        }
    }
}

容器自動掃描機制

啟動時,ApplicationContext 會自動掃描所有 Bean,找出實作 ApplicationListener 的實例並註冊。發布事件時,容器同步通知所有監聽器,監聽器自行判斷事件型別決定是否處理,實現鬆耦合的觀察者模式。

應用場景

  • 用戶註冊成功發送歡迎郵件、積分初始化
  • 訂單狀態變更觸發庫存扣減、物流通知
  • 系統審計日誌非同步寫入
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved