天天看點

Spring IoC 容器的了解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 則在初始化時自檢,這樣有利于檢查所依賴的屬性是否注入。