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