欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

浅谈Spring的两种配置容器

程序员文章站 2024-02-22 10:52:28
spring提供了两种容器类型       springioc容器是一个ioc service provider。提...

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,代码如下:

/** 
 * 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类似,例如:

/** 
 * bean载入时间:在上下文启动后预载入所有的单实例bean,确保在使用前已经准备好了,不需要等待它们被创建。 
 */ 
applicationcontext context1 = new filesystemxmlapplicationcontext("c:/beans.xml"); 
mybean mybean = factory.getbean("mybean"); 
applicationcontext context = new classpathxmlapplicationcontext("beans.xml"); 
mybean mybean = factory.getbean("mybean"); 

使用filesystemxmlapplicationcontext与classpathxmlapplicationcontext的区别是:

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

总结

以上就是本文关于浅谈spring的两种配置容器的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站:浅谈docker安全机制内核安全与容器之间的网络安全详解docker使用linux iptables 和 interfaces管理容器网络等,有什么问题可以随时留言,小编会及时回复大家的。感谢阅读!