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

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

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

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

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

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

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

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

          下面通過一個例子展示如何處理Spring內定的事件(例程3.8)。創(chuàng)建一個Java工程,添加Spring開發(fā)能力后,新建ioc.test包。在包中新建ApplicationEventListener類,實現(xiàn)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()+" 事件已發(fā)生!");    
          11         }else if(event instanceof ContextRefreshedEvent ){//如果是容器關閉事件
          12             System.out.println(event.getClass().getSimpleName()+" 事件已發(fā)生!");    
          13         }else if(event instanceof ContextStartedEvent ){
          14             System.out.println(event.getClass().getSimpleName()+" 事件已發(fā)生!");
          15         }else if(event instanceof ContextStoppedEvent){
          16             System.out.println(event.getClass().getSimpleName()+" 事件已發(fā)生!");
          17         }else{
          18             System.out.println("有其它事件發(fā)生:"+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類,在主方法中,調用容器的相應方法,觸發(fā)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();//觸發(fā)ContextRefreshedEvent事件            
          11         ac.start(); //觸發(fā)ContextStartedEvent事件
          12         ac.stop();  //觸發(fā)ContextStoppedEvent事件        
          13         ac.close(); //關閉容器,觸發(fā)ContextClosedEvent事件
          14 
          15     }
          16 }
          17 

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


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








          By:殘夢追月
          posted on 2008-07-25 09:45 殘夢追月 閱讀(4313) 評論(0)  編輯  收藏 所屬分類: Spring
          主站蜘蛛池模板: 涡阳县| 辽阳市| 扶绥县| 道真| 莒南县| 永州市| 永兴县| 武冈市| 定南县| 微山县| 大连市| 渭源县| 南阳市| 丰顺县| 恩施市| 昆山市| 象州县| 大同县| 韶山市| 麦盖提县| 内乡县| 乌兰浩特市| 七台河市| 宽城| 江都市| 淮滨县| 罗甸县| 城固县| 凤城市| 凌源市| 搜索| 克山县| 杭州市| 兴城市| 阿坝| 旬阳县| 益阳市| 舒兰市| 城步| 巩义市| 建瓯市|