Spring IoC容器
一、Ioc简介
IoC容器是Spring中的核心
我们通常也将其称之为Spring容器
Spring使用IoC容器对对象的实例化和初始化的操作,及管理对象的创建到销毁的生命周期
Spring中使用的对象全部由IoC容器进行管理,所以在借助Spring开发时,我们无需使用new关键字创建对象
我们将IoC容器管理的对象称为Spring Bean
Spring Bean就是 Java 对象,它同new关键字创建的对象相同
在Spring中我们可以通过XML或Java注解两种方式创建生成Java Bean
二、IoC容器的类型
Spring中提供2种不同类型的IoC容器,即BeanFactory和ApplicationContext容器
1. BeanFactory 容器
BeanFactory是最简单的容器,由org.springframework.beans.factory.BeanFactory接口定义,采用懒加载(lazy-load)-使用时即时加载,所以容器启动比较快。BeanFactory只对外提供容器最基本的操作功能
其功能:为兼容Spring集成的第三方框架(如 BeanFactoryAware、InitializingBean、DisposableBean)
BeanFactory:是一个管理Bean 的工厂,它主要负责初始化各种 Bean,并调用它们的生命周期方法。
BeanFactory 接口有多个实现类,
如:org.springframework.beans.factory.xml.XmlBeanFactory
使用 BeanFactory 需要创建 XmlBeanFactory 类的实例,
通过 XmlBeanFactory 类的构造函数来传递 Resource 对象
Resource resource = new ClassPathResource("applicationContext.xml");
BeanFactory factory = new XmlBeanFactory(resource);
2. ApplicationContext 容器
ApplicationContext 继承了 BeanFactory 接口,由 org.springframework.context.ApplicationContext 接口定义,对象在启动容器时加载
ApplicationContext 在 BeanFactory 的基础上增加了很多企业级功能,如 AOP、国际化、事件支持等
ApplicationContext 接口有两个常用的实现类,具体如下。
1)ClassPathXmlApplicationContext
该类从类路径 ClassPath 中寻找指定的 XML 配置文件,并完成 ApplicationContext 的实例化工作,具体如下所示。
ApplicationContext applicationContext = new ClassPathXmlApplicationContext(String configLocation);
在上述代码中,configLocation 参数用于指定 Spring 配置文件的名称和位置,如 Beans.xml。
2)FileSystemXmlApplicationContext
该类从指定的文件系统路径中寻找指定的 XML 配置文件,并完成 ApplicationContext 的实例化工作,具体如下所示。
ApplicationContext applicationContext = new FileSystemXmlApplicationContext(String configLocation);
它与 ClassPathXmlApplicationContext 的区别是:
在读取 Spring 的配置文件时,
FileSystemXmlApplicationContext 不会从类路径中读取配置文件,而是通过参数指定配置文件的位置。
即 FileSystemXmlApplicationContext 可以获取类路径之外的资源,如“D:/test/Beans.xml”。
通常在 Java 项目中,会采用 ClassPathXmlApplicationContext 类实例化 ApplicationContext 容器的方式,
而在 Web 项目中,ApplicationContext 容器的实例化工作会交由 Web 服务器完成。
Web 服务器实例化 ApplicationContext 容器通常使用基于 ContextLoaderlistener 实现的方式,
它只需要在 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>
注意事项:
BeanFactory及ApplicationContext 都可采用XML配置文件的方式加载Bean
二者的区别:
当Bean中某一个属性没有注入,使用 BeanFacotry 加载后,第一次调用 getBean() 方法时会抛出异常
而 ApplicationContext 则会在初始化时自检,这样有利于检查所依赖的属性是否注入
在日常的开发中,我们经常使用ApplicationContext
在一些特殊的情况下,如:系统资源较少时,才会使用 BeanFactory
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。