当前位置: 移动技术网 > IT编程>开发语言>Java > 浅谈Spring的两种配置容器

浅谈Spring的两种配置容器

2019年07月19日  | 移动技术网IT编程  | 我要评论

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管理容器网络等,有什么问题可以随时留言,小编会及时回复大家的。感谢阅读!

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网