Spring監聽器的完整使用步驟

一、使用步驟

  簡單來說,spring中監聽器的使用分爲兩個步驟:註冊Application監聽器發佈Application事件。具體實現一下:

1. 自定義事件

spring定義了一個標準的事件抽象類ApplicationEvent,繼承了這個抽象類就是一個Application事件。

public class MyApplicationEvent extends ApplicationEvent {
    
    public MyApplicationEvent(Object source, String msg) {
        // 調用父類的構造函數
        super(source);
    }
}

Spring內部也有許多自己實現的Application事件

2. 自定義監聽器

spring定義了一個標準的監聽器接口ApplicationListener,實現了這個接口的類就是一個Application監聽器。

public class MyApplicationListener implements ApplicationListener<ApplicationEvent> {
    @Override
    public void onApplicationEvent(ApplicationEvent event) {
        if(event instanceof ContextRefreshedEvent){
        	// spring內部事件
            System.out.println("監聽到上下文刷新時間!");
        }else if(event instanceof MyApplicationEvent ){
            System.out.println("監聽到myApplicationEvent!");
        }else{
            System.out.println("有其它事件發生:"+event.getClass().getName());
        }
    }
}

監聽器不僅能監聽到自己手動發佈的事件,也能監聽到Spring內部自己發佈的事件。
ApplicationListener是一個泛型接口,泛型中的類型代表事件類型。監聽器只能監聽到泛型表示的事件或者該事件的子類

3. 註冊監聽器

<bean id="myApplicationListener" class="com.kaka.spring.context.MyApplicationListener"/>

其實就是把自定義的監聽器當成一個bean實例,註冊到IOC容器中。

4. 發佈自定義事件

    public void applicationEventTest() {
        // 1. 初始化容器
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("listenerTest.xml");
        // 2. 創建自定義的事件
        MyApplicationEvent myApplicationEvent = new MyApplicationEvent("test event!");
        // 3. 發佈事件
        applicationContext.publishEvent(myApplicationEvent);
    }

執行結果
在這裏插入圖片描述

二、擴展

  • Spring常見內置事件:
  1. ContextRefreshedEvent:當ApplicationContext初始化或者刷新時觸發該事件.
  2. ContextClosedEvent:當ApplicationContext被關閉時觸發該事件。容器被關閉時,其管理的所有單例Bean都被銷燬。
  3. RequestHandleEvent:在Web應用中,當一個http請求(request)結束觸發該事件。
  4. ContextStartedEvent:Spring2.5新增的事件,當容器調用ConfigurableApplicationContext的Start()方法開始/重新開始容器時觸發該事件。
  5. ContextStopedEvent:Spring2.5新增的事件,當容器調用ConfigurableApplicationContext的Stop()方法停止容器時觸發該事件。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章