posts - 66,  comments - 11,  trackbacks - 0
          解析文本信息:
          有時,你不希望硬編碼顯示給用戶信息。也許是因為這個信息經(jīng)常發(fā)生改變,或者是你的應(yīng)用系統(tǒng)提供國際化功能,你要用用戶的本地語言顯示文本。
          java對文本國際化的支持使你能夠定義一個或多個屬性文件保存應(yīng)用系統(tǒng)中需要顯示的文本。Spring的ApplicationContext通過MessageSource接口為容器提供參數(shù)化信息支持,Spring提供了一個現(xiàn)成的MessageSource實現(xiàn)。ResourceBundleMessageSource只是調(diào)用java自己的java.util.ResourceBundle來解析信息。
          例如:
          <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
                  
          <property name="basename">
                      
          <value>trainingtext</value>
                  
          </property>
              
          </bean>

          這個Bean的名字必須是messageSource,因為ApplicationContext在裝配應(yīng)用系統(tǒng)Bean的時候查找這個名字的Bean,你不需要將messageSource注入到應(yīng)用系統(tǒng)中的Bean中,而是使用ApplicationContext自己的getMessage()方法。
          Locale locale = ...;
          第一個參數(shù)表示文本文件中的ID
          第二個參數(shù)表示傳遞到資源文件中的數(shù)組,顯示最終文件
          第三個參數(shù)表示采用哪種方式顯示
          String text  = context.getMessage("computer",new Object[0],locale);

          監(jiān)聽事件與發(fā)布事件:

          如果你想對一個類的方法進(jìn)行監(jiān)聽,首先要定義事件,然后在這個方法中通過ApplicationContext發(fā)布它,最后在ApplicationContext.xml中定義這個監(jiān)聽器。這樣,每當(dāng)方法執(zhí)行的時候,監(jiān)聽器就會監(jiān)聽到對應(yīng)的事件的觸發(fā)。

          事件分為ApplicationContext發(fā)布的事件和自定義的事件。這些事件都是抽象類org.springframework.context.ApplicationEvent的子類。
          在應(yīng)用系統(tǒng)生命周期中,ApplicationContext會發(fā)布很多事件,告訴感興趣的監(jiān)聽器發(fā)生了什么事情。。系統(tǒng)事件有如下幾個:
          1、ContextClosedEvent:在應(yīng)用上下文關(guān)閉的時候發(fā)布的事件;
          2、contextRefreshedEvent:在應(yīng)用上下文初始化或刷新的時候發(fā)布的事件;
          3、RequestHandledEvent:在web應(yīng)用上下文中,當(dāng)一個請求被處理后發(fā)布的事件。
          首先要編寫為哪個類的哪個方法添加事件:
          public class Animal implements ApplicationContextAware {
           
               
          private ApplicationContext ac;
           
               
          private String name;
           
               
          private int age;
           
               
          public String speak(){
           
                    ac.publishEvent(
          new AnimalSpeakEvent(this,this.name));
                   
          return " 我的名字是;"+this.name+",我的年齡是:"+this.age;
              }
           
           
              
          public void setApplicationContext(ApplicationContext arg0) throws BeansException {
               
          this.ac = arg0;
              }
           
           
          //Getet和Seter省略
           
           }

          自定義事件入下:
          import org.springframework.context.ApplicationEvent;
           
           
          public class AnimalSpeakEvent extends ApplicationEvent {
           
               
          private static final long serialVersionUID = 1L;
           
               
          private String animalName;
           
               
          public AnimalSpeakEvent(Object source) {
                   
          super(source);
               }
           
               
          public AnimalSpeakEvent(Object source,String animalName) {
                   
          super(source);
                   
          this.animalName = animalName;
               }
           
               
          public String getAnimalName() {
                   
          return animalName;
               }
           
           }

          然后是實現(xiàn)監(jiān)聽器,監(jiān)聽器必須實現(xiàn)org.springframework.context.ApplicationListener接口。這個接口要求你的Bean實現(xiàn)onApplicationEvent()方法:
          public class RefreshListener implements ApplicationListener{
              
          public void onApplicationEvent(ApplicationEvent event){
              }
          }

          import org.springframework.context.ApplicationEvent;
           
          import org.springframework.context.ApplicationListener;
           
           
          public class AnimalEventListener implements ApplicationListener {
           
               
          public void onApplicationEvent(ApplicationEvent event) {
                   
          if (event instanceof AnimalSpeakEvent) {
                       AnimalSpeakEvent a 
          = (AnimalSpeakEvent) event;
                           System.out.println(
          "事件監(jiān)聽器" + this.getClass().getSimpleName()+":有一個動物在講話!它的名字是:"+ a.getAnimalName());
                   }
               }
           }

          最后就是在映射文件中定義這個監(jiān)聽器:
          <?xml version="1.0" encoding="UTF-8"?>
           
          <beans  …………>
           
               
          <bean id="Listener" class="ioc.test.AnimalEventListener" />
           
               
          <bean id="Animal" class="ioc.test.Animal">
                 
          <property name="name" value="老虎" />
                 
          <property name="age" value="5" />
               
          </bean>
           
           
          </beans>
          最后是測試類:
          import org.springframework.context.support.AbstractApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext;
           
           
          public class TestMain {
           
               
          public static void main(String[] args) {
           
                   AbstractApplicationContext ac 
          = new ClassPathXmlApplicationContext(
                           
          "applicationContext.xml");
           
                   
          //從容器獲取動物實例
                   Animal animal = (Animal)ac.getBean("Animal");
           
                   
          //讓動物講話
                   System.out.println(animal.speak());                
               }
           }


          感知其他Bean:
              在極大程度上,運行在Spring容器中的Bean就像生活在The Matrix里的人類。對于這些Bean來說,他們不知道自己的注冊名,甚至不知道自己運行在容器中。通常這是好事,因為如果一個Bean知道容器的存在的話,他就和Spring耦合在一起了,在容器以外無法存在。
              但有時候Bean需要知道更多信息。有時他們需要知道他們是誰,他們在哪里運行。有時他們需要服用那顆紅色藥丸。
              在Spring Bean環(huán)境中,紅色藥丸就是BeanNameAware、BeanFactoryAware和ApplicationContextAware接口。通過實現(xiàn)這3個接口,Bean分別可以知道自己的名字,他們所處的BeanFactory以及他們所處的ApplicationContext.
              注意,通過實現(xiàn)這些接口,一個Bean就和Spring耦合在一起。

              感知系統(tǒng)容器對于Bean來說是福是禍。一方面,應(yīng)用上下文的獲得給Bean提供了很多權(quán)利。另一方面,知道容器會把Bean和Spring耦合起來,這是要盡量避免的事情。    

          posted on 2009-11-03 20:52 王永慶 閱讀(173) 評論(0)  編輯  收藏 所屬分類: SPRING
          <2009年11月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          常用鏈接

          留言簿(1)

          隨筆分類

          隨筆檔案

          關(guān)注blogs

          搜索

          •  

          最新評論

          • 1.?re: 心中的那個她[未登錄]
          • 如果心情能那么容易放開就好了,碰到她是我的緣分,但是她的緣分不知道在哪里。
          • --王永慶
          • 2.?re: 心中的那個她[未登錄]
          • 兄弟,喜歡就大膽去追好了,就是因為喜歡才會有不愉快,如果想一輩子沒有這些煩惱,找一個可有可無的人就好了。這種事講的是緣分吧。別人對你好不好其實不太重要。放開心情就好了。
          • --萍水相逢
          • 3.?re: 心中的那個她
          • 只能同甘不能共苦,就他媽算了吧,程序員也是人啊!我現(xiàn)在也很討厭女的不理解人情。
          • --咖啡妝
          • 4.?re: 難以割舍的那份情感
          • 評論內(nèi)容較長,點擊標(biāo)題查看
          • --王永慶
          • 5.?re: 難以割舍的那份情感
          • 評論內(nèi)容較長,點擊標(biāo)題查看
          • --隔葉黃鶯

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 峨山| 东海县| 大庆市| 潞西市| 台中市| 红河县| 盘山县| 泗洪县| 盈江县| 清苑县| 绥芬河市| 广汉市| 古蔺县| 邳州市| 高碑店市| 荆州市| 墨玉县| 阜阳市| 奉节县| 吴桥县| 白沙| 吴旗县| 墨竹工卡县| 互助| 禄劝| 钦州市| 大连市| 灵川县| 济宁市| 马公市| 龙川县| 清河县| 平度市| 久治县| 蛟河市| 海林市| 建德市| 长垣县| 兴文县| 吐鲁番市| 阜平县|