BeanFacotry是spring中比較原始的Factory。如XMLBeanFactory就是一種典型的BeanFactory。原始的BeanFactory無法支持spring的許多插件,如AOP功能、Web應用等。
ApplicationContext接口,它由BeanFactory接口派生而來,因而提供BeanFactory所有的功能。ApplicationContext以一種更向面向框架的方式工作以及對上下文進行分層和實現繼承,ApplicationContext包還提供了以下的功能: • MessageSource, 提供國際化的消息訪問 • 資源訪問,如URL和文件 • 事件傳播 • 載入多個(有繼承關係)上下文 ,使得每一個上下文都專注於一個特定的層次,比如應用的web層 1.利用MessageSource進行國際化 BeanFactory是不支持國際化功能的,因爲BeanFactory沒有擴展Spring中MessageResource接口。相反,由於ApplicationContext擴展了MessageResource接口,因而具有消息處理的能力(i18N),具體spring如何使用國際化,以後章節會詳細描述。 2.強大的事件機制(Event) 基本上牽涉到事件(Event)方面的設計,就離不開觀察者模式。不明白觀察者模式的朋友,最好上網瞭解下。因爲,這種模式在java開發中是比較常用的,又是比較重要的。 ApplicationContext的事件機制主要通過ApplicationEvent和ApplicationListener這兩個接口來提供的,和java swing中的事件機制一樣。即當ApplicationContext中發佈一個事件的時,所有擴展了ApplicationListener的Bean都將會接受到這個事件,並進行相應的處理。 Spring提供了部分內置事件,主要有以下幾種: ContextRefreshedEvent :ApplicationContext發送該事件時,表示該容器中所有的Bean都已經被裝載完成,此ApplicationContext已就緒可用 ContextStartedEvent:生命週期 beans的啓動信號 ContextStoppedEvent: 生命週期 beans的停止信號 ContextClosedEvent:ApplicationContext關閉事件,則context不能刷新和重啓,從而所有的singleton bean全部銷燬(因爲singleton bean是存在容器緩存中的) 雖然,spring提供了許多內置事件,但用戶也可根據自己需要來擴展spriong中的事物。注意,要擴展的事件都要實現ApplicationEvent接口。 3.底層資源的訪問 ApplicationContext擴展了ResourceLoader(資源加載器)接口,從而可以用來加載多個Resource,而BeanFactory是沒有擴展ResourceLoader 4.對Web應用的支持 與BeanFactory通常以編程的方式被創建不同的是,ApplicationContext能以聲明的方式創建,如使用ContextLoader。當然你也可以使用ApplicationContext的實現之一來以編程的方式創建ApplicationContext實例 。 ContextLoader有兩個實現:ContextLoaderListener和ContextLoaderServlet。它們兩個有着同樣的功能,除了listener不能在Servlet 2.2兼容的容器中使用。自從Servelt 2.4規範,listener被要求在web應用啓動後初始化。很多2.3兼容的容器已經實現了這個特性。使用哪一個取決於你自己,但是如果所有的條件都一樣,你大概會更喜歡ContextLoaderListener;關於兼容方面的更多信息可以參照ContextLoaderServlet的JavaDoc。 這個listener需要檢查contextConfigLocation參數。如果不存在的話,它將默認使用/WEB-INF/applicationContext.xml。如果它存在,它就會用預先定義的分隔符(逗號,分號和空格)分開分割字符串,並將這些值作爲應用上下文將要搜索的位置。ContextLoaderServlet可以用來替換ContextLoaderListener。這個servlet像listener那樣使用contextConfigLocation參數。
|
BeanFacotry是spring中比較原始的Factory。如XMLBeanFactory就是一種典型的BeanFactory。原始的BeanFactory無法支持spring的許多插件,如AOP功能、Web應用等。
ApplicationContext接口,它由BeanFactory接口派生而來,因而提供BeanFactory所有的功能。ApplicationContext以一種更向面向框架的方式工作以及對上下文進行分層和實現繼承,ApplicationContext包還提供了以下的功能: • MessageSource, 提供國際化的消息訪問 • 資源訪問,如URL和文件 • 事件傳播 • 載入多個(有繼承關係)上下文 ,使得每一個上下文都專注於一個特定的層次,比如應用的web層 1.利用MessageSource進行國際化 BeanFactory是不支持國際化功能的,因爲BeanFactory沒有擴展Spring中MessageResource接口。相反,由於ApplicationContext擴展了MessageResource接口,因而具有消息處理的能力(i18N),具體spring如何使用國際化,以後章節會詳細描述。 2.強大的事件機制(Event) 基本上牽涉到事件(Event)方面的設計,就離不開觀察者模式。不明白觀察者模式的朋友,最好上網瞭解下。因爲,這種模式在java開發中是比較常用的,又是比較重要的。 ApplicationContext的事件機制主要通過ApplicationEvent和ApplicationListener這兩個接口來提供的,和java swing中的事件機制一樣。即當ApplicationContext中發佈一個事件的時,所有擴展了ApplicationListener的Bean都將會接受到這個事件,並進行相應的處理。 Spring提供了部分內置事件,主要有以下幾種: ContextRefreshedEvent :ApplicationContext發送該事件時,表示該容器中所有的Bean都已經被裝載完成,此ApplicationContext已就緒可用 ContextStartedEvent:生命週期 beans的啓動信號 ContextStoppedEvent: 生命週期 beans的停止信號 ContextClosedEvent:ApplicationContext關閉事件,則context不能刷新和重啓,從而所有的singleton bean全部銷燬(因爲singleton bean是存在容器緩存中的) 雖然,spring提供了許多內置事件,但用戶也可根據自己需要來擴展spriong中的事物。注意,要擴展的事件都要實現ApplicationEvent接口。 3.底層資源的訪問 ApplicationContext擴展了ResourceLoader(資源加載器)接口,從而可以用來加載多個Resource,而BeanFactory是沒有擴展ResourceLoader 4.對Web應用的支持 與BeanFactory通常以編程的方式被創建不同的是,ApplicationContext能以聲明的方式創建,如使用ContextLoader。當然你也可以使用ApplicationContext的實現之一來以編程的方式創建ApplicationContext實例 。 ContextLoader有兩個實現:ContextLoaderListener和ContextLoaderServlet。它們兩個有着同樣的功能,除了listener不能在Servlet 2.2兼容的容器中使用。自從Servelt 2.4規範,listener被要求在web應用啓動後初始化。很多2.3兼容的容器已經實現了這個特性。使用哪一個取決於你自己,但是如果所有的條件都一樣,你大概會更喜歡ContextLoaderListener;關於兼容方面的更多信息可以參照ContextLoaderServlet的JavaDoc。 這個listener需要檢查contextConfigLocation參數。如果不存在的話,它將默認使用/WEB-INF/applicationContext.xml。如果它存在,它就會用預先定義的分隔符(逗號,分號和空格)分開分割字符串,並將這些值作爲應用上下文將要搜索的位置。ContextLoaderServlet可以用來替換ContextLoaderListener。這個servlet像listener那樣使用contextConfigLocation參數。
轉載自:http://blog.csdn.net/hi_kevin/article/details/7325554 |