浅谈Spring的两种配置容器

Posted yb

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了浅谈Spring的两种配置容器相关的知识,希望对你有一定的参考价值。

浅谈Spring的两种配置容器

原文:https://www.jb51.net/article/126295.htm

 更新时间:2017年10月20日 08:44:41   作者:黄小鱼ZZZ   技术分享图片 我要评论

这篇文章主要介绍了浅谈Spring的两种配置容器,介绍了其实现以及简单的实例,具有一定参考价值,需要的朋友可以了解下。

Spring提供了两种容器类型

      SpringIOC容器是一个IOC Service Provider。提供了两种容器类型:BeanFactory和ApplicationContext。Spring的IOC容器是一个提供IOC支持的轻量级容器。除了基本的ioc支持,它作为轻量级容器还提供了IOC之外的支持。

BeanFactory

       BeanFactory是基础类型IOC容器。顾名思义,就是生产Bean的工厂。能够提供完整的IOC服务。没有特殊指定的话,其默认采用延迟初始化策略。只有当客户端对象需要访问容器中的某个受管对象的时候,才对该对象进行初始化和依赖注入操作。因此,相对来说,容器启动初期的时候速度是比较快的。所需要的资源有限。所以,对资源有限,并且功能要求不是很严格的场景,BeanFactory是比较合适的IOC容器

BeanFactory有多种实现,其中,最常用的是XMLBeanFactory,它根据XML文件中的定义装载Bean。在创建XMLBeanFactory时,需要传递一个org.springframework.core.io.Resource的实例给构造器,此Resource实例用来提供XML文件给BeanFactory。

Spring提供了以下多种Resource的实现:

 

Resource实现 描述
    1. org.springframework.core.io.ByteArrayResource 定义内容由一组字节给定的资源
    2. org.springframework.core.io.ClassPathResource 定义可从classpath提起的资源
    3. org.springframework.core.io.DescripiveResource 定义包含资源描述符,但实际没有可读资源的资源
    4. org.springframework.core.io.FileSyatemResource 定义可从文件系统提取的资源
    5. org.springframework.core.io.InputStreamResource 定义可从输入流提取的资源
    6. org.springframework.core.io.UrlResource 定义可从给定URL提取的资源
    7. org.springframework.web.portlet.context.PortletContextResource 定义可用在portlet上下文中的资源
    8. org.springframework.web.context.support.ServletContextResource 定义可用在servlet上下文中的资源

 

例如使用FileSystemResource来创建一个XMLBeanFactory,代码如下:

1
2
3
4
5
6
7
8
9
10
11
/**
 * Bean工厂从"c:/beans.xml"文件中读取Bean的定义信息,并启动容器。
 * Bean载入时间:此时,Bean工厂并没有实例化Bean。即Bean是被延迟载入到Bean工厂中的,
 * 在需要使用Bean的时候(调用getBean("beanName"))才被实例化。
 */
BeanFactory factory = new XmlBeanFactory(new FileSystemResource("c:/beans.xml"));
  
/**
 * 实例化Bean,并使用依赖注入设置Bean的属性及关联关系等。
 */
MyBean myBean = factory.getBean("myBean");

ApplicationContext

      ApplicationContext是在BeanFactory的基础上边构建的,是相对比较高级的容器的实现,除了拥有BeanFactory的所有支持,ApplicationContext还提供了其他的高级特性。例如事件发布、国际化信息支持等。ApplicationContext所管理的对象,在该类型容器启动之后,默认全部初始化并绑定完成。相对于BeanFactory来说,ApplicationContext会要求更多的系统资源。因为在启动时就完成了所有的初始化,容器启动的时间与BeanFactory相比会长一些。因此,ApplicationContext更适用于系统资源充足,并且要求更多功能的场景中。

     ApplicationContext间接继承自BeanFactory,所以说它是构建与BeanFactory之上的IOC容器。

ApplicationContext的诸多实现中,经常会用到的有以下三种实现:

 

ApplicationContext实现 描述
   1. org.springframework.context.support.ClassPathXMLApplicationContext 从类路径中的XML文件载入上下文定义信息
   2. org.springframework.context.support.FileSystemXmlApplicationContext 从文件系统中的XML文件载入上下文定义信息
   3. org.springframework.web.context.support.XMLWebApplicationContext 从Web系统中的XML文件载入上下文定义信息

 

从文件系统或者类路径载入应用上下文与将Bean载入BeanFactory类似,例如:

1
2
3
4
5
/**
 * Bean载入时间:在上下文启动后预载入所有的单实例Bean,确保在使用前已经准备好了,不需要等待它们被创建。
 */
ApplicationContext context1 = new FileSystemXmlApplicationContext("c:/beans.xml");
MyBean myBean = factory.getBean("myBean");
1
2
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
MyBean myBean = factory.getBean("myBean");

使用FileSystemXmlApplicationContext与ClassPathXMLApplicationContext的区别是:

前者只能在指定的路径中查找;后者可在整个类路径(包括JAR文件)中查找XML文件。

以上是关于浅谈Spring的两种配置容器的主要内容,如果未能解决你的问题,请参考以下文章

javaEE——Spring 四种切面技术(拦截)获取Spring容器的两种办法

javaEE——Spring 四种切面技术(拦截)获取Spring容器的两种办法

(001)spring容器创建bean的两种方式

Java知识点16 Spring创建IOC容器的两种方式

spring自动装配有几种方式

SpringBoot java配置类@Configuration 的两种写法