zoukankan      html  css  js  c++  java
  • Spring 的两个配置容器的讲解

    容器 是Spring框架的核心,是组件存活的地方。Spring容器使用DI管理所有组成应用系统的组件,协作组件之间建立联。而且,

           这些对象简洁易懂,降低耦合性,支持重用,容易被测试。

     

    Spring提供了多种容器实现,可分为两类:Bean工厂 应用上下文 

     

    1. BeanFactory :由org.springframework.beans.factory.BeanFactory接口定义,是最简单的容器,提供了基础的依赖注入支持。

        BeanFactory采用了工厂设计模式,负责创建和分发各种类型的Bean,创建协作对象间的关联关系,管理Bean的生命周期,调用

        用户定义的初始化和销毁方法(如果定义了这些方法的话)等。

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

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

     

    2. ApplicationContext :由org.springframework.context.ApplicationContext接口定义,建立在BeanFactory基础之上,提供了系统构架

        服务。如:文本信息解析工具,包括对国际化(I18N)的支持;载入文件资源的通用方法;可以向注册为监听器的Bean发送事件等。

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

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

        使用FileSystemXmlApplicationContext与ClassPathXMLApplicationContext的区别是:

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

     

    3. 如何选择使用容器?

        ApplicationContext包含BeanFactory的所有功能,几乎所有的应用系统都选择ApplicationContext而不是BeanFactory。

        只有在资源很少的情况下,才会考虑采用BeanFactory,如在移动设备上等。

     

    参考链接:https://blog.csdn.net/hi_kevin/article/details/7325554

     

     

     

  • 相关阅读:
    谷歌浏览器chrome://inspect/#devices调试webview的页面和控制台布局错乱问题
    deviceready has not fired after 5 seconds
    Redis Lua脚本调试
    nginx的location、rewrite玩法详解
    nginx记录post body/payload数据
    字符串匹配的Boyer-Moore(BM)算法
    生产环境优雅的重启基于Nginx、Tornado的Web服务进程
    Affiliate实战记录之一:CPI、CPA、CPM...名词解释
    用docker快速搭建wordpress博客
    怎样才能不被机器人抢我们的饭碗?
  • 原文地址:https://www.cnblogs.com/xiohao/p/3662594.html
Copyright © 2011-2022 走看看