標籤:函數 功能 title 國際化 作用 net nsca 建構函式 lib
Spring提供了容器實現的兩種方式:
Bean工廠(BeanFactory介面),提供了基礎的依賴注入支援;
應用上下文(ApplicationContext介面),建立在Bean工廠基礎之上,提供了系統架構服務。
現階段,企業開發在選擇上更加傾向於ApplicationContext介面,因為ApplicationContext介面涵蓋了BeanFactory介面,如果使用一個普通的BeanFactory介面,很多其他的功能將不會起作用,如Spring的事物transcation和AOP都不會起作用;但是Beanfactory為什麼又是一種沒有被捨棄的方式!在有些情況下,比如運行在資源受限裝置的內嵌式的應用,對記憶體消耗很大,幾百兆的記憶體也會有很大的影響,此時BeanFactory是更優的選擇。
使用BeanFactory擷取bean的方式(常用XmlBeanFactory)
在Spring中有幾種BeanFactory的實現。其中最常使用的是org.springframework.beans.factory.xml.XmlBeanFactory,它根據XML檔案中的定義裝在Bean。要建立XmlBeanFactory,需要傳遞一個org.springframework.core.io.Resource執行個體給建構函式。此Resource對象提供XML檔案給工廠。
有以下幾種方式配置XML源:
org.springframework.core.io.ByteArrayResource
org.springframework.core.io.ClassPathResource
org.springframework.core.io.DescriptiveResource
org.springframework.core.io.FileSystemResource
org.springframework.core.io.InputStreamResource
比如使用FileSystemResource建立一個XmlBeanFactory:
BeanFactory factory = XmlBeanFactory(new InputStreamResource("D:\userBean.xml"));
UserBean userBean = (UserBean)factory.getBean("userBean");
三、使用ApplicationContext擷取Bean(三種常用實現)
表面上,ApplicationContext和BeanFactory差不多。兩者都是載入Bean定義資訊,裝配Bean,根據需要分發Bean。
但是,ApplicationContext提供了更多功能:
1、提供了文本資訊解析工具,包括對國際化(I18N)的支援。
2、提供了載入檔案資源的通用方法,如載入圖片。
3、可以向註冊為監聽器的Bean發送事件。
因此,我們應該更多的使用ApplicationContext,而不是BeanFactory。
注意:二者的關係是ApplicationContext介面擴充於BeanFactory
ApplicationContext的諸多實現中,以下三種經常用到:
ClassPathXmlApplicationContext
FileSystemXmlApplicationContext
XmlWebApplicationContext
第一種和第二種的區別在於,ClassPath可以在整個類路徑(包括JAR檔案)中尋找定義Bean的XML檔案;而FileSystem只能在指定路徑中尋找。
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext*.xml");
ApplicationContext context = new FileSystemXmlApplicationContext("D:\applicationContext*.xml");
Beanfactory與ApplicationContext