第一, BeanFactoryhtml
BeanFactory其實是實例化,配置和管理衆多bean的容器。 這些bean一般會彼此合做,於是它們之間會產生依賴。 BeanFactory使用的配置數據能夠反映這些依賴關係中 (一些依賴可能不像配置數據同樣可見,而是在運行期做爲bean之間程序交互的函數)。web
一個BeanFactory能夠用接口org.springframework.beans.factory.BeanFactory表示, 這個接口有多個實現。 最常使用的的簡單的eanFactory實現是org.springframework.beans.factory.xml.XmlBeanFactory。 (這裏提醒一下:ApplicationContext是BeanFactory的子類, 因此大多數的用戶更喜歡使用ApplicationContext的XML形式)。spring
要建立XmlBeanFactory,須要傳遞一個org.springframework.core.io.Resource實例個構造函數。此Resource對象提供XML文件給工廠。編程
Spring提供了有用的Resource實現。設計模式
org.springframework.core.io.ByteArrayResource定義內容有一組字節給定的資源app
org.springframework.core.io.ClassPathResource定義能夠從classpath提取的資源框架
org.springframework.core.io.DescriptiveResource定義包含資源描述符可是實際沒有能夠讀取的資源eclipse
org.springframework.core.io.FileSystemRescource定義能夠從文件系統提取的資源函數
org.springframework.core.io.InputStreamResource定義能夠從輸入流提取的資源測試
org.springframework.web.portlet.context.PortletContextResource定義可用在portlet上下文的資源
org.springframework.web.portlet.context.suport.servletContextRescource定義可用在Servlet上下文中的資源
org.springframework.core.io.UrlRescource定義可從給定的URl提取的資源
ApplicationContext 和Resource 路徑
1.ClassPathResource:
只有一種方式new ClassPathResource("applicationContext.xml");
取得Resource接口的實例 後,可使用getFile(),getInputStream()等方法來操做資源文件Resource 接口的事例只是資源文件一個抽象表明,指定的資源有可能不存在,可使用exists()進行測試。
以文件系統絕對路徑和相對路徑的兩種方式進行訪問;
如:
(1)絕對路徑:Resource resource = context.getResource("E:/Workspaces/MyEclipse 8.5/Hello/src/applicationContext.xml")。
(2)相對路徑:可是若是使用相對路徑要注意其根目錄。例如在eclipse中,它的根目錄就是你工程目錄做爲你的根目錄。Resource resource = context.getResource("src/applicationContext.xml")。
2.FileSystemResource:有兩種方式;
3.ServletContextResource:經過 ServletContextResource 以相對於Web應用根目錄的方式進行訪問。如:Resource resource = context.getResource("src/applicationContext.xml")。
4.UrlResource :經過Java.NET.URL來訪問資源,固然它也支持File格式:"file:"
第二,ApplicationContext
beans包提供了以編程的方式管理和操控bean的基本功能,而context包增長了ApplicationContext,它以一種更加面向框架的方式加強了BeanFactory的功能。多數用戶能夠以一種徹底的聲明式方式來使用ApplicationContext,甚至不用去手工建立它,可是卻去依賴像ContextLoader的支持類,在J2EE的Web應用的啓動進程中用它啓動ApplicationContext。固然,這種狀況下還能夠以編程的方式建立一個ApplicationContext。
Context包的基礎是位於org.springframework.context包中的ApplicationContext接口。它是由BeanFactory接口集成而來,提供BeanFactory全部的功能。爲了以一種更像面向框架的方式工做,context包使用分層和有繼承關係的上下文類,包括:
1.MessageSource,提供對i18n消息的訪問;
2.資源訪問,好比URL和文件;
3.事件傳遞給實現了ApplicationListener接口的bean;
4.載入多個(有繼承關係)上下文類,使得每個上下文類都專一於一個特定的層次,好比應用的Web層
在ApplicationContext的諸多實現中,有三個常常用到:
1。ClassPathXmlApplicationContext:從類路徑中的XML文件載入上下文定義信息,把上下文定義文件看成類路徑資源。
2。FileSystemXmlApplicationContext:從文件系統中的XML文件載入上下文定義信息。
3。XmlWebApplicationContext:從Web系統中的XMl文件載入上下文信息。
例如:
//經過ApplicationContext來獲取Spring的配置文件
ApplicationContext actx=new FileSystemXmlApplicationContext("applicationContext.xml.xml");
//經過Bean的id來獲取bean
Hello hello=(Hello)actx.getBean("HelloWorld");
不管是那種實現,都是用getBean()方法,這不要奇怪,由於ApplicationContext接口擴展自BeanFactory接口。
應用上下文與Bean工廠的另外一個重要的區別就是關於單實例Bean是如何載入的。Bean工廠延遲載入全部的Bean,直到getbean()方法被調用是Bean才被建立。應用上下文則會在上下文啓動後預載入全部的單實例Bean。經過預載入單實例bean ,確保當你須要的時候,你就不用等待,由於它們已經建立好了。
在spring中,兩個最基本最重要的包是 org.springframework.beans 和 org.springframework.context. 這兩個包中的代碼爲Spring的反向控制 特性(也叫做依賴注射)提供了基礎。
第一, BeanFactory
BeanFactory其實是實例化,配置和管理衆多bean的容器。 這些bean一般會彼此合做,於是它們之間會產生依賴。 BeanFactory使用的配置數據能夠反映這些依賴關係中 (一些依賴可能不像配置數據同樣可見,而是在運行期做爲bean之間程序交互的函數)。
一個BeanFactory能夠用接口org.springframework.beans.factory.BeanFactory表示, 這個接口有多個實現。 最常使用的的簡單的eanFactory實現是org.springframework.beans.factory.xml.XmlBeanFactory。 (這裏提醒一下:ApplicationContext是BeanFactory的子類, 因此大多數的用戶更喜歡使用ApplicationContext的XML形式)。
要建立XmlBeanFactory,須要傳遞一個org.springframework.core.io.Resource實例個構造函數。此Resource對象提供XML文件給工廠。
Spring提供了有用的Resource實現。
org.springframework.core.io.ByteArrayResource定義內容有一組字節給定的資源
org.springframework.core.io.ClassPathResource定義能夠從classpath提取的資源
org.springframework.core.io.DescriptiveResource定義包含資源描述符可是實際沒有能夠讀取的資源
org.springframework.core.io.FileSystemRescource定義能夠從文件系統提取的資源
org.springframework.core.io.InputStreamResource定義能夠從輸入流提取的資源
org.springframework.web.portlet.context.PortletContextResource定義可用在portlet上下文的資源
org.springframework.web.portlet.context.suport.servletContextRescource定義可用在Servlet上下文中的資源
org.springframework.core.io.UrlRescource定義可從給定的URl提取的資源
ApplicationContext 和Resource 路徑
1.ClassPathResource:
只有一種方式new ClassPathResource("applicationContext.xml");
取得Resource接口的實例 後,可使用getFile(),getInputStream()等方法來操做資源文件Resource 接口的事例只是資源文件一個抽象表明,指定的資源有可能不存在,可使用exists()進行測試。
以文件系統絕對路徑和相對路徑的兩種方式進行訪問;
如:
(1)絕對路徑:Resource resource = context.getResource("E:/Workspaces/MyEclipse 8.5/Hello/src/applicationContext.xml")。
(2)相對路徑:可是若是使用相對路徑要注意其根目錄。例如在eclipse中,它的根目錄就是你工程目錄做爲你的根目錄。Resource resource = context.getResource("src/applicationContext.xml")。
2.FileSystemResource:有兩種方式;
3.ServletContextResource:經過 ServletContextResource 以相對於Web應用根目錄的方式進行訪問。如:Resource resource = context.getResource("src/applicationContext.xml")。
4.UrlResource :經過Java.NET.URL來訪問資源,固然它也支持File格式:"file:"
第二,ApplicationContext
beans包提供了以編程的方式管理和操控bean的基本功能,而context包增長了ApplicationContext,它以一種更加面向框架的方式加強了BeanFactory的功能。多數用戶能夠以一種徹底的聲明式方式來使用ApplicationContext,甚至不用去手工建立它,可是卻去依賴像ContextLoader的支持類,在J2EE的Web應用的啓動進程中用它啓動ApplicationContext。固然,這種狀況下還能夠以編程的方式建立一個ApplicationContext。
Context包的基礎是位於org.springframework.context包中的ApplicationContext接口。它是由BeanFactory接口集成而來,提供BeanFactory全部的功能。爲了以一種更像面向框架的方式工做,context包使用分層和有繼承關係的上下文類,包括:
1.MessageSource,提供對i18n消息的訪問;
2.資源訪問,好比URL和文件;
3.事件傳遞給實現了ApplicationListener接口的bean;
4.載入多個(有繼承關係)上下文類,使得每個上下文類都專一於一個特定的層次,好比應用的Web層
在ApplicationContext的諸多實現中,有三個常常用到:
1。ClassPathXmlApplicationContext:從類路徑中的XML文件載入上下文定義信息,把上下文定義文件看成類路徑資源。
2。FileSystemXmlApplicationContext:從文件系統中的XML文件載入上下文定義信息。
3。XmlWebApplicationContext:從Web系統中的XMl文件載入上下文信息。
例如:
//經過ApplicationContext來獲取Spring的配置文件
ApplicationContext actx=new FileSystemXmlApplicationContext("applicationContext.xml.xml");
//經過Bean的id來獲取bean
Hello hello=(Hello)actx.getBean("HelloWorld");
不管是那種實現,都是用getBean()方法,這不要奇怪,由於ApplicationContext接口擴展自BeanFactory接口。
應用上下文與Bean工廠的另外一個重要的區別就是關於單實例Bean是如何載入的。Bean工廠延遲載入全部的Bean,直到getbean()方法被調用是Bean才被建立。應用上下文則會在上下文啓動後預載入全部的單實例Bean。經過預載入單實例bean ,確保當你須要的時候,你就不用等待,由於它們已經建立好了。
下面我總結下載入配置文件的方法:
ApplicationContext
1. ClassPathXmlApplicationContext 編譯路徑總有三種方式:
1) ApplicationContext factory=new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
2)ApplicationContext factory=new ClassPathXmlApplicationContext("applicationContext.xml");
3)ApplicationContext factory=new ClassPathXmlApplicationContext("file:E:/Workspaces/MyEclipse 8.5/Hello/src/applicationContext.xml");
2. FileSystemXmlApplicationContext用文件系統的路徑總有兩種相對與絕對路徑
1) ApplicationContext factory=new FileSystemXmlApplicationContext("src/applicationContext.xml");
2) ApplicationContext factory=new FileSystemXmlApplicationContext("E:/Workspaces/MyEclipse 8.5/Hello/src/applicationContext.xml");
3. XmlWebApplicationContext 是專爲Web工程定製的。
ServletContext servletContext = request.getSession().getServletContext();
ApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(servletContext );
下面我總結下載入配置文件的方法:
ApplicationContext
1. ClassPathXmlApplicationContext 編譯路徑總有三種方式:
1) ApplicationContext factory=new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
2)ApplicationContext factory=new ClassPathXmlApplicationContext("applicationContext.xml");
3)ApplicationContext factory=new ClassPathXmlApplicationContext("file:E:/Workspaces/MyEclipse 8.5/Hello/src/applicationContext.xml");
2. FileSystemXmlApplicationContext用文件系統的路徑總有兩種相對與絕對路徑
1) ApplicationContext factory=new FileSystemXmlApplicationContext("src/applicationContext.xml");
2) ApplicationContext factory=new FileSystemXmlApplicationContext("E:/Workspaces/MyEclipse 8.5/Hello/src/applicationContext.xml");
3. XmlWebApplicationContext 是專爲Web工程定製的。
ServletContext servletContext = request.getSession().getServletContext();
ApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(servletContext );
https://www.cnblogs.com/ITtangtang/p/3978349.html