您的「關注」和「點贊」,是信任,是承認,是支持,是動力......java
如意見相佐,可留言。
本人必將不遺餘力試圖作到準確和全面,終其一輩子進行修改補充更新。程序員
Spring IoC,全稱 Spring Inversion of Control ,控制反轉。web
IoC(控制反轉) 是指在程序開發中,實例的建立再也不由調用者管理,而是由 Spring 容器建立。Spring 容器會負責控制程序之間的關係,而不是由程序代碼直接控制,所以,控制權由程序代碼轉移到了 Spring 容器中,控制權發生了反轉,這就是 Spring 的 IoC 思想。spring
簡單理解,IoC(控制反轉)就是控制權的轉移,即把建立(new)對象的權利,反轉給第三方Spring 框架去建立(new)。也就是把對象的建立的權利及對象的生命週期的管理過程交由Spring 框架來處理,今後在開發過程當中再也不須要關注對象的建立和生命週期的管理,而是在須要時由 Spring 框架提供,這個由 Spring 框架管理對象建立和生命週期的機制稱之爲控制反轉。而在建立對象的過程當中 Spring 能夠依據配置對對象的屬性進行設置,這個過稱之爲依賴注入,也即 DI。apache
示意以下所示:服務器
# 之前 User user = new User(); // 由程序員控制 new 對象
# 如今: 如今 Spring 容器來建立對象 User user = spring容器.get對象("容器中的惟一對象Id");
BeanFactory
是基礎類型的 IoC 容器,它由 org.springframework.beans.facytory.BeanFactory
接口定義,並提供了完整的 IoC 服務支持。微信
簡單理解,BeanFactory 就是一個管理 Bean 的工廠,它主要負責初始化各類 Bean,並調用它們的生命週期方法。app
BeanFactory 接口有多個實現類,最多見的以下所示:框架
org.springframework.beans.factory.xml.XmlBeanFactory
:它是根據 XML 配置文件中的定義裝配 Bean 的。建立 BeanFactory 實例時,須要提供 Spring 所管理容器的詳細配置信息,這些信息一般採用 XML 文件形式管理。webapp
其加載配置信息的代碼具體以下所示:
BeanFactory beanFactory = new XmlBeanFactory(new FileSystemResource("D://applicationContext.xml"));
ApplicationContext
接口的全路徑爲 org.springframework.context.ApplicationContext
,它不只提供了 BeanFactory 的全部功能,還添加了對 i18n(國際化)、資源訪問、事件傳播等方面的良好支持。
ApplicationContext 是 BeanFactory 的子接口,也被稱爲應用上下文。
ApplicationContext 接口有兩個經常使用的實現類,具體以下所示:
ClassPathXmlApplicationContext
該類從類路徑 ClassPath
中尋找指定的 XML 配置文件,找到並裝載完成 ApplicationContext 的實例化工做,具體以下所示:
# configLocation 參數:用於指定 Spring 配置文件的名稱和位置,如 applicationContext.xml。 ApplicationContext applicationContext = new ClassPathXmlApplicationContext(String configLocation);
FileSystemXmlApplicationContext
該類從指定的文件系統路徑中尋找指定的 XML 配置文件,找到並裝載完成 ApplicationContext 的實例化工做,具體以下所示:
ApplicationContext applicationContext = new FileSystemXmlApplicationContext(String configLocation);
它與ClassPathXmlApplicationContext
的區別:
在讀取 Spring 的配置文件時,FileSystemXmlApplicationContext
再也不從類路徑中讀取配置文件,而是經過參數指定配置文件的位置,它能夠獲取類路徑以外的資源,如"D:/workspaces/applicationContext.xml"
。
使用 Spring 框架,當要建立 ApplicationContext 容器時,能夠實例化任何一個類(ClassPathXmlApplicationContext 或 FileSystemXmlApplicationContext)。建議以下所示:
web.xml
中添加以下代碼:<!--指定Spring配置文件的位置,有多個配置文件時,以逗號分隔--> <context-param> <param-name>contextConfigLocation</param-name> <!--spring將加載spring目錄下的applicationContext.xml文件--> <param-value> classpath:spring/applicationContext.xml </param-value> </context-param> <!--指定以ContextLoaderListener方式啓動Spring容器--> <listener> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class> </listener>
getBean()
方法時會拋出異常,而 ApplicationContext 則在初始化時自檢,這樣有利於檢查所依賴的屬性是否注入。介紹到這裏,相信你們內心都有一個「理想對象」了吧?
那就是 ApplicationContext,在平常開發中一般選擇使用的都是這個接口,只有在系統資源較少時,才考慮一下 BeanFactory 哦。