隨筆-42  評論-349  文章-4  trackbacks-0

          (殘夢追月原創,轉載注明)

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

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

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

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

          ContestStartedEventSpring2.5新增的事件,當容器調用ConfigurableApplicationContextStart()方法開始/重新開始容器時觸發該事件。

          5)      ContestStopedEventSpring2.5新增的事件,當容器調用ConfigurableApplicationContextStop()方法停止容器時觸發該事件。

          下面通過一個例子展示如何處理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容器會自動將其注冊。








          By:殘夢追月
          posted on 2008-07-25 09:45 殘夢追月 閱讀(4323) 評論(0)  編輯  收藏 所屬分類: Spring
          主站蜘蛛池模板: 郧西县| 科尔| 萍乡市| 北辰区| 南京市| 双峰县| 湛江市| 武隆县| 广饶县| 盐池县| 昭苏县| 鸡西市| 江源县| 醴陵市| 成武县| 田阳县| 施秉县| 江达县| 墨江| 八宿县| 襄樊市| 安泽县| 富宁县| 广东省| 乡宁县| 龙门县| 卢湾区| 维西| 南丹县| 科技| 大竹县| 宁海县| 平利县| 宜宾市| 汾阳市| 泰来县| 咸宁市| 灵山县| 蓝山县| 宁乡县| 荆州市|