解析:SpringIoC容器

开课吧开课吧锤锤2021-08-06 14:03

IoC容器是Spring的核心,也可以称为Spring容器。Spring通过IoC容器来管理对象的实例化和初始化,以及对象从创建到销毁的整个生命周期。  

Spring中使用的对象都由IoC容器管理,不需要我们手动使用new运算符创建对象。由IoC容器管理的对象称为SpringBean,SpringBean就是Java对象,和使用new运算符创建的对象没有区别。  

Spring通过读取XML或Java注解中的信息来获取哪些对象需要实例化。  

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可以获取类路径之外的资源,如“F:/workspaces/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。本教程中使用的是ApplicationContext容器。  

以上就是开课吧广场小编为大家整理发布的“解析:SpringIoC容器”一文,更多Java教程相关内容尽在开课吧广场Java教程频道!  

解析:SpringIoC容器

 

免责声明:本站所提供的内容均来源于网友提供或网络搜集,由本站编辑整理,仅供个人研究、交流学习使用。如涉及版权问题,请联系本站管理员予以更改或删除。
有用
分享