淺談 Spring IoC 容器理解

相信接觸過Spring框架的程序猿,肯定會接觸容器這個概念,那麼這個Spring容器究竟是什麼呢?

Spring IoC 容器

Spring 容器是 Spring 框架的核心。容器將創建對象,把它們連接在一起,配置它們,並管理他們的整個生命週期從創建到銷燬。Spring 容器使用依賴注入(DI)來管理組成一個應用程序的組件。(看完抽象概念可能多少會有點懵,彆着急,再往下看看)

Spring IoC 容器具體化

Spring 提供了以下兩種不同類型的容器,分別是:

  • BeanFactory
  • ApplicationContext

BeanFactory 容器

這是一個最簡單的容器,它主要的功能是爲依賴注入 (DI) 提供支持,這個容器接口在 org.springframework.beans.factory.BeanFactor 中被定義。
在 Spring 中,有大量對 BeanFactory 接口的實現。其中,最常被使用的是 XmlBeanFactory 類。這個容器從一個 XML 文件中讀取配置元數據,由這些元數據來生成一個被配置化的系統或者應用。輕鬆實現 BeanFactory

//利用 ClassPathResource() 去加載在路徑 CLASSPATH 下可用的 bean 配置文件
XmlBeanFactory factory = new XmlBeanFactory(new ClassPathResource("spring.xml"));

ApplicationContext 容器

Application Context 是 BeanFactory 的子接口,也被成爲 Spring 上下文。
Application Context 是 spring 中較高級的容器。和 BeanFactory 類似,它可以加載配置文件中定義的 bean,將所有的 bean 集中在一起,當有請求的時候分配 bean。
最常被使用的 ApplicationContext 接口實現(用來加載Spring配置文件):

  • FileSystemXmlApplicationContext(默認文件路徑): 該容器從 XML 文件中加載已被定義的 bean。在這裏,你需要提供給構造器 XML 文件的完整路徑。
  • ClassPathXmlApplicationContext(默認類路徑): 該容器從 XML 文件中加載已被定義的 bean。在這裏,你不需要提供 XML 文件的完整路徑,只需正確配置 CLASSPATH 環境變量即可,因爲,容器會從 CLASSPATH 中搜索 bean 配置文件。
//默認類路徑加載Spring配置文件,classpath:(可以省略)
 ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("spring.xml");

//默認文件路徑加載Spring配置文件,file:(可以省略)
FileSystemXmlApplicationContext ftx = new FileSystemXmlApplicationContext("spring/src/spring.xml");

Tips:代碼展示的是默認情況下Spring配置文件加載路徑,但是,如果ClassPathXmlApplicationContext 加載時指定file:(文件路徑),也是可以成功加載的;相對應FileSystemXmlApplicationContext 加載時指定classpath:(類路徑)也可以完成加載。


如果是Web項目加載Spring配置文件:

	<!-- 加載配置文件 同時需要配置監聽器 -->
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath:spring.xml</param-value>
	</context-param>
	
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>

小結

Spring IoC 容器就是某個實現了 ApplicationContext 接口的類的實例;也可以說 Spring IoC 容器實際上就是 ApplicationContext(實例化對象)

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