<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

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

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

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

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

    事件分為ApplicationContext發(fā)布的事件和自定義的事件。這些事件都是抽象類org.springframework.context.ApplicationEvent的子類。
    在應用系統(tǒng)生命周期中,ApplicationContext會發(fā)布很多事件,告訴感興趣的監(jiān)聽器發(fā)生了什么事情。。系統(tǒng)事件有如下幾個:
    1、ContextClosedEvent:在應用上下文關閉的時候發(fā)布的事件;
    2、contextRefreshedEvent:在應用上下文初始化或刷新的時候發(fā)布的事件;
    3、RequestHandledEvent:在web應用上下文中,當一個請求被處理后發(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來說是福是禍。一方面,應用上下文的獲得給Bean提供了很多權利。另一方面,知道容器會把Bean和Spring耦合起來,這是要盡量避免的事情。    

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

    常用鏈接

    留言簿(1)

    隨筆分類

    隨筆檔案

    關注blogs

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲熟伦熟女新五十路熟妇 | 大片免费观看92在线视频线视频| 亚洲精品视频免费看| 亚洲va久久久噜噜噜久久狠狠| 色播在线永久免费视频网站| 国产精品亚洲高清一区二区| 国产免费久久精品99久久| MM131亚洲国产美女久久| 国产激情久久久久影院老熟女免费| 亚洲A∨午夜成人片精品网站| 国产亚洲精品免费| 亚洲区小说区图片区| 不卡视频免费在线观看| 亚洲国产成人片在线观看| 日韩电影免费在线观看| 久久精品国产亚洲AV香蕉| h视频在线观看免费网站| 中文字幕在线观看亚洲日韩| 午夜男人一级毛片免费| 亚欧洲精品在线视频免费观看| 亚洲人成网站在线观看播放| 日本免费电影一区二区| 亚洲一区二区三区不卡在线播放| 最近中文字幕免费mv视频7| 黄色a三级三级三级免费看| 亚洲AV无码不卡无码| 免费福利在线播放| 亚洲AV无码专区在线观看成人| 亚洲精品国产精品乱码不卡| a级毛片毛片免费观看久潮喷| 亚洲欧洲自拍拍偷午夜色| 真实乱视频国产免费观看| 中文字幕看片在线a免费| 99人中文字幕亚洲区| 日本a级片免费看| 两性色午夜视频免费播放| 亚洲制服丝袜精品久久| 亚洲国产一区二区三区| 1000部无遮挡拍拍拍免费视频观看 | 国产妇乱子伦视频免费| 亚洲成a人无码亚洲成av无码|