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

Spring ApplicationContext 事件機制(二):內建事件實戰

     編輯:Java 相關知識

Spring 內建五種標準應用程式上下文事件,分別對應容器生命週期的關鍵節點:

  • ContextRefreshedEvent:容器初始化或重新整理時觸發。
  • ContextClosedEvent:容器關閉時觸發,所有單例 Bean 被銷毀。
  • RequestHandledEvent:Web 環境下 HTTP 請求處理完成時觸發。
  • ContextStartedEvent (Spring 2.5+):呼叫 ConfigurableApplicationContext.start() 時觸發。
  • ContextStoppedEvent (Spring 2.5+):呼叫 ConfigurableApplicationContext.stop() 時觸發。

事件監聽器實作

實作 ApplicationListener 介面,在 onApplicationEvent 中判斷事件型別並處理:

public class ApplicationEventListener implements ApplicationListener {
    public void onApplicationEvent(ApplicationEvent event) {
        if (event instanceof ContextRefreshedEvent) {
            System.out.println("ContextRefreshedEvent 事件已發生!");
        } else if (event instanceof ContextClosedEvent) {
            System.out.println("ContextClosedEvent 事件已發生!");
        } else if (event instanceof ContextStartedEvent) {
            System.out.println("ContextStartedEvent 事件已發生!");
        } else if (event instanceof ContextStoppedEvent) {
            System.out.println("ContextStoppedEvent 事件已發生!");
        } else {
            System.out.println("其他事件:" + event.getClass().getName());
        }
    }
}

Spring 設定與測試

在 XML 中宣告監聽器 Bean:

<bean id="applicationEventListener" class="ioc.test.ApplicationEventListener" />

測試類別依序呼叫 start()、stop()、close() 觸發對應事件:

public class TestMain {
    public static void main(String[] args) {
        AbstractApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
        ac.start();   // 觸發 ContextStartedEvent
        ac.stop();    // 觸發 ContextStoppedEvent
        ac.close();   // 觸發 ContextClosedEvent
    }
}

控制台輸出確認事件順序正確。重點在於:只要將監聽器註冊為 Bean,ApplicationContext 即會自動發現並註冊,無需額外設定。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved