浅谈 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(实例化对象)

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