隨筆-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 殘夢追月 閱讀(4312) 評論(0)  編輯  收藏 所屬分類: Spring
          主站蜘蛛池模板: 西盟| 桐乡市| 株洲县| 太谷县| 察隅县| 河间市| 大邑县| 开江县| 乐东| 惠东县| 长沙县| 天峨县| 保康县| 永和县| 巍山| 葫芦岛市| 黎平县| 贵溪市| 务川| 龙口市| 星座| 宁阳县| 舟山市| 定边县| 高邑县| 扎兰屯市| 民权县| 临高县| 益阳市| 布拖县| 新化县| 阳信县| 西平县| 阳西县| 赣州市| 和龙市| 化隆| 冷水江市| 徐汇区| 阿勒泰市| 定安县|