zoukankan      html  css  js  c++  java
  • Spring-1、BeanFactory和ApplicationContext的区别

    一、描述

    BeanFactory:

    是Spring里面最低层的接口,提供了最简单的容器的功能,只提供了实例化对象和拿对象的功能;

    ApplicationContext:

    应用上下文,继承BeanFactory接口,它是Spring的一各更高级的容器,提供了更多的有用的功能;

    1) 国际化(MessageSource)

    2) 访问资源,如URL和文件(ResourceLoader)

    3) 载入多个(有继承关系)上下文 ,使得每一个上下文都专注于一个特定的层次,比如应用的web层  

    4) 消息发送、响应机制(ApplicationEventPublisher)

    5) AOP(拦截器)

    二、两者装载bean的区别

    BeanFactory:

    BeanFactory在启动的时候不会去实例化Bean,中有从容器中拿Bean的时候才会去实例化;

    //XmlBeanFactory是典型的BeanFactory。
     BeanFactory factory = new XmlBeanFactory("XXX.xml");
     //获取一个叫做mdzz的bean。在这个时候进行实例化。
     factory.getBean("mdzz");

    ApplicationContext:

    ApplicationContext在启动的时候就把所有的Bean全部实例化了。它还可以为Bean配置lazy-init=true来让Bean延迟实例化; 

    //当我们实例化XXX.xml的时候,该文件中配置的bean都会被实例化。(该bean scope是singleton)
    ApplicationContext appContext = new ClassPathXmlApplicationContext("XXX.xml");

    三、三种获取ApplicationContext对象引用的方法

    /第一种加载方法,加载的是classpath下的配置文件。
    ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
    //第二种加载方法,加载的是磁盘路径下的文件。
    ApplicationContext applicationContext = new FileSystemXmlApplicationContext("applicationContext.xml");
    //第三种加载方法,XmlWebApplicationContext,从web系统中加载。
    
    //得到配置文件后,就能拿到想要的对象。例如:
    HelloService helloService = (HelloService) applicationContext.getBean("userService");
    //在这当中getBean中的参数为你在配置文件下,这个对象的id,一个标识。

    4、区别:

    1. 如果使用ApplicationContext,如果配置的bean是singleton,那么不管你有没有或想不想用它,它都会被实例化。好处是可以预先加载,坏处是浪费内存。
    2. BeanFactory,当使用BeanFactory实例化对象时,配置的bean不会马上被实例化,而是等到你使用该bean的时候(getBean)才会被实例化。好处是节约内存,坏处是速度比较慢。多用于移动设备的开发。
    3. 没有特殊要求的情况下,应该使用ApplicationContext完成。因为BeanFactory能完成的事情,ApplicationContext都能完成,并且提供了更多接近现在开发的功能。
  • 相关阅读:
    深入理解sizeof
    trie树详解
    高精度计算
    编写高效的Android代码
    Android Architecture
    AIDL Android中的远程接口
    性能测试常见术语
    软件与软件测试相关
    注解实现Springmvc+jsp步骤
    非注解实现SpringMvc+JSP (一般用不到 主要用于了解研究底层)
  • 原文地址:https://www.cnblogs.com/chenxiaoxian/p/10427089.html
Copyright © 2011-2022 走看看