程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 【Spring】4、BeanFactory 和 ApplicationContext的區別

【Spring】4、BeanFactory 和 ApplicationContext的區別

編輯:關於JAVA

【Spring】4、BeanFactory 和 ApplicationContext的區別。本站提示廣大學習愛好者:(【Spring】4、BeanFactory 和 ApplicationContext的區別)文章只能為提供參考,不一定能成為您想要的結果。以下是【Spring】4、BeanFactory 和 ApplicationContext的區別正文


轉自:http://blog.csdn.net/intlgj/article/details/5660587

在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 );

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved