程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Spring中ApplicationContext的事件機制(二 內定事件)

Spring中ApplicationContext的事件機制(二 內定事件)

編輯:關於JAVA

在Spring中已經定義了五個標准事件,分別介紹如下:

1)ContextRefreshedEvent:當ApplicationContext初始化或者刷新時觸發該事件。

2)ContextClosedEvent:當ApplicationContext被關閉時觸發該事件。容器被關閉時,其管理的所有 單例Bean都被銷毀。

3)RequestHandleEvent:在Web應用中,當一個http請求(request)結束觸發該事件。

ContestStartedEvent:Spring2.5新增的事件,當容器調用ConfigurableApplicationContext的 Start()方法開始/重新開始容器時觸發該事件。

5)   ContestStopedEvent:Spring2.5新增的事件,當容器調用ConfigurableApplicationContext 的Stop()方法停止容器時觸發該事件。

下面通過一個例子展示如何處理Spring內定的事件(例程3.8)。創建一個Java工程,添加Spring開發 能力後,新建ioc.test包。在包中新建ApplicationEventListener類,實現ApplicationListener接口, 在onApplicationEvent()方法中添加事件處理代碼,如下:

1 package ioc.test;
2
3 //Import省略
4 public class ApplicationEventListener implements ApplicationListener {
5
6   public void onApplicationEvent(ApplicationEvent event) {
7
8     //如果是容器刷新事件
9     if(event instanceof ContextClosedEvent ){
10       System.out.println(event.getClass().getSimpleName()+" 事件已發生!");
11     }else if(event instanceof ContextRefreshedEvent ){//如果是容器關閉事件
12       System.out.println(event.getClass().getSimpleName()+" 事件已發生!");
13     }else if(event instanceof ContextStartedEvent ){
14       System.out.println(event.getClass().getSimpleName()+" 事件已發生!");
15     }else if(event instanceof ContextStoppedEvent){
16       System.out.println(event.getClass().getSimpleName()+" 事件已發生!");
17     }else{
18       System.out.println("有其它事件發生:"+event.getClass().getName());
19     }
20
21   }
22
23 }
24

在Spring配置文件中定義一個Bean,類為ApplicationEventListener,代碼如下:

1 <?xml version="1.0" encoding="UTF-8"?>
2 <beans …………
3
4  <bean id="ApplicationEventListener" class="ioc.test.ApplicationEventListener" />
5
6 </beans>
7

添加含有主方法的TesMain類,在主方法中,調用容器的相應方法,觸發Spring內定事件,代碼如下:

1 package ioc.test;
2
3 //import省略
4 public class TesMain {
5
6   public static void main(String[] args) {
7     AbstractApplicationContext ac = new ClassPathXmlApplicationContext ("applicationContext.xml");
8
9
10      //  ac.refresh();//觸發ContextRefreshedEvent事件
11     ac.start(); //觸發ContextStartedEvent事件
12     ac.stop(); //觸發ContextStoppedEvent事件
13     ac.close(); //關閉容器,觸發ContextClosedEvent事件
14
15   }
16 }
17

運行主類,控制台輸出如下:

從例子中可以知道,要注冊事件監聽器,我們只需要把它配置成一個Bean即可,ApplicationContext 容器會自動將其注冊。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved