1. 程式人生 > >Spring ——Spring IoC容器詳解(圖示)

Spring ——Spring IoC容器詳解(圖示)

1.1 Spring IoC容器

     從昨天的例子當中我們已經知道spring IoC容器的作用,它可以容納我們所開發的各種Bean。並且我們可以從中獲取各種釋出在Spring IoC容器裡的Bean,並通過描述得到它。

 

1.2 Spring IoC容器的設計

  Spring IoC容器的設計主要是基於BeanFactory和ApplicationContext兩個介面,其中ApplicationContext是BeanFactory的子介面之一。換句話說BeanFactory是Spring IoC容器所定義的最底層介面,而ApplicationContext是其高階介面之一,並且對BeanFactory功能做了許多有用的擴充套件,所以在絕大部分的工作場景下,都會使用ApplicationContext作為Spring IoC容器。

序號容器 & 描述
1

Spring BeanFactory 容器

它是最簡單的容器,給 DI 提供了基本的支援,它用 org.springframework.beans.factory.BeanFactory 介面來定義。BeanFactory 或者相關的介面,如 BeanFactoryAware,InitializingBean,DisposableBean,在 Spring 中仍然存在具有大量的與 Spring 整合的第三方框架的反向相容性的目的。

2

Spring ApplicationContext 容器

該容器添加了更多的企業特定的功能,例如從一個屬性檔案中解析文字資訊的能力,釋出應用程式事件給感興趣的事件監聽器的能力。該容器是由 org.springframework.context.ApplicationContext 介面定義。

 
   

 

2.1 Spring BeanFactory 容器

        這是一個最簡單的容器,它主要的功能是為依賴注入 (DI) 提供支援,這個容器介面在 org.springframework.beans.factory.BeanFactor 中被定義。BeanFactory 和相關的介面,比如BeanFactoryAware、DisposableBean、InitializingBean,仍舊保留在 Spring 中,主要目的是向後相容已經存在的和那些 Spring 整合在一起的第三方框架。

在 Spring 中,有大量對 BeanFactory 介面的實現。其中,最常被使用的是 XmlBeanFactory 類。這個容器從一個 XML 檔案中讀取配置元資料,由這些元資料來生成一個被配置化的系統或者應用。

     上次的例子,只修改了測試檔案內容:

    

  在這裡XmlBeanFactory()API不常用,接下來就是我們常用的ApplicationContext

 

2.2  Spring  ApplicationContext 容器

       Application Context 是 BeanFactory 的子介面,也被成為 Spring 上下文。 Application Context 是 spring 中較高階的容器。和 BeanFactory 類似,它可以載入配置檔案中定義的 bean,將所有的 bean 集中在一起,當有請求的時候分配 bean。ApplicationContext 包含 BeanFactory 所有的功能。一般情況下,相對於 BeanFactory,ApplicationContext 會更加優秀。

 

最常被使用的 ApplicationContext 介面實現:

  • FileSystemXmlApplicationContext:該容器從 XML 檔案中載入已被定義的 bean。在這裡,你需要提供給構造器 XML 檔案的完整路徑。

  • ClassPathXmlApplicationContext:該容器從 XML 檔案中載入已被定義的 bean。在這裡,你不需要提供 XML 檔案的完整路徑,只需正確配置 CLASSPATH 環境變數即可,因為,容器會從 CLASSPATH 中搜索 bean 配置檔案。
  • WebXmlApplicationContext:該容器會在一個 web 應用程式的範圍內載入在 XML 檔案中已被定義的 bean。

之前橘子那個例子當中已經做過ClassPathXmlApplicationContext的例子了,接下來,讓我們看一個關於 FileSystemXmlApplicationContext 的例子。

     例子:

   

 

    其他的地方沒有變,把之前的ClassPathXmlApplicationContext()API換成 FileSystemXmlApplicationContext ()API去載入bean可用配置xml檔案。使用FileSystemXmlApplicationContext和使用ClassPathXmlApplicationContext的區別在於: FileSystemXmlApplicationContext在指定的檔案系統路徑下查詢xml檔案; 而ClassPathXmlApplicationContext是在所有的類路徑(包含JAR檔案) 下查詢xml檔案。

 

 

    如  :
ApplicationContext context = new FileSystemXmlApplicationContext(“C:/bean.xml”);

ApplicationContext context = new ClassPathXmlApplicationContext(“bean.xml”);

&n