Spring IoC 容器的理解

Spring IoC 容器

IoC是什麼

  • IoC (全名Inversion of Control,即控制反轉)是指在程序開發中,實例的創建不再由調用者管理,而是由 Spring 容器創建。
  • Spring 容器會負責控制程序之間的關係,而不是由程序代碼直接控制,因此,控制權由程序代碼轉移到了 Spring 容器中,控制權發生了反轉,這就是 Spring 的 IoC 思想。
  • Spring 提供了兩種 IoC 容器,分別爲 BeanFactory 和 ApplicationContext,接下來將針對這兩種 IoC 容器進行詳細講解。

BeanFactory

  • BeanFactory 是基礎類型的 IoC 容器,提供了完整的 IoC 服務支持。簡單來說,BeanFactory 就是一個管理 Bean 的工廠,用於創建,配置,管理bean,bean之間的依賴關係也由BeanFactory負責維護。

  • BeanFactory對bean的實例化過程,無須bean的調用者關心,調用者只需要通過getBean()方法獲得指定bean的引用。

  • BeanFactory有個ApplicationContext子接口,該接口比BeanFactory增強了更多的功能,該接口的實例有時被稱爲Spring的上下文,通常都應該考慮ApplicationContext接口,只有非常關注內存的情況下,才考慮使用BeanFactory。

ApplicationContext

  • ApplicationContext 是 BeanFactory 的子接口,也被稱爲應用上下文。該接口比BeanFactory增強了更多的功能。

  • ApplicationContext 接口有兩個常用的實現類,具體如下

    • ClassPathXmlApplicationContext

      該類從類路徑 ClassPath 中尋找指定的 XML 配置文件,找到並裝載完成 ApplicationContext 的實例化工作,具體如下所示

      ApplicationContext ctx = new ClassPathXmlApplicationContext("classpath:/springTest.xml");

    • FileSystemXmlApplicationContext

      該類從指定的文件系統路徑中尋找指定的 XML 配置文件,找到並裝載完成 ApplicationContext 的實例化工作,具體如下所示

      ApplicationContext applicationContext = new FileSystemXmlApplicationContext("G:\spring-framework-master\spring-context\src\main\resources\springTest.xml");

      它與 ClassPathXmlApplicationContext 的區別是:在讀取 Spring 的配置文件時,FileSystemXmlApplicationContext 不再從類路徑中讀取配置文件,而是通過參數指定配置文件的位置,它可以獲取類路徑之外的資源。

BeanFacotry 與ApplicationContext 區別

二者的主要區別在於,如果 Bean 的某一個屬性沒有注入,則使用 BeanFacotry 加載後,在第一次調用 getBean() 方法時會拋出異常,而 ApplicationContext 則在初始化時自檢,這樣有利於檢查所依賴的屬性是否注入。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章