Spring IOC 概述
所謂控制反轉就是,通過 XML 或者註解來描述自己所需要的結果,第三方就會去建立這個結果,我們通過第三方就可以直接得到這個結果。
IOC 的概念
在 Spring Ioc 中,這個第三方就是 Spring 框架。也就是說建立物件的過程不需要自己手動 new
,而是交給 Spring 框架來讀取 XML 描述檔案的資訊,通過反射技術來建立物件。
為什麼不直接自己 new
呢?搞得這麼繞?當業務複雜時,可以把專業的事情交給專業的人來做。另一方面,也能夠使得程式有更好的靈活性,比如 Spring 中採用了 Ioc 的思想後, 就可以在此基礎上採用 AOP 的思想實現程式實現類的動態轉換,達到不修改原有程式碼的基礎上,對程式進行修改和增強。
Spring IOC 容器
在使用 Spring 框架的過程中,我們只需要在配置檔案中描述需要得到的 Bean 物件就可以了。那具體建立物件的功能是由誰來實現的呢?那就是 Spring 的 IOC 容器了,Spring 的 IOC 容器負責建立和管理 Bean 物件,IOC 容器類也稱 Bean工廠類。
兩個介面
IOC 容器類的繼承體系圖如下

_IOC繼承體系圖.png
有兩個介面需要關注下,
-
BeanFactory
,最底層的介面,包含了 Bean 工廠基本的功能,通常不用。只有在呼叫getBean()
方法的時候,才會生成類的例項。 -
ApplicationContext
,做了更多功能的擴充套件,通常用這個。該介面載入配置檔案的時候,就會將 Spring 管理的類全部都例項化。
兩個實現類
從圖中可以看出,有兩個實現類,分別是
-
ClassPathXmlApplicationContext
,載入src
目錄下的配置檔案,通常用它。 -
FileSystemXmlApplicationContext
,載入檔案系統下的配置檔案(就是磁碟上其他目錄的檔案,這樣做的意義何在?)通常不會用它。
Spring 分模組開發配置
也就是配置檔案按照系統業務模組分為多個,有兩種實現方式:
- 在載入的時候一次性載入多個檔案
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("xxx1.xml","xxx2.xml");
- 在一個主配置檔案中引入多個其他的配置檔案
<import resource="xxx1.xml"/>