• 面试题|Spring中BeanFactory与ApplicationContext的本质区别和作用


      BeanFactory 是Bean工厂,是Spring 框架最核心的接口,它提供了高级IoC 的配置机制。如果说BeanFactory是Spring的心脏,那么应用上下文ApplicationContext就是完整的躯体了,ApplicationContext继承了BeanFactory接口,拥有BeanFactory的全部功能,扩展了更多面向实际应用的、企业级的高级特性。

      它们都可以视作Spring的容器,Spring容器负责对象(Spring中我们都称之为bean)整个生命周期的管理——实例化、装配和销毁 Bean。在基于Spring的Java EE应用中,所有的组件都被当成Bean处理,包括数据源,Hibernate的SessionFactory、事务管理器等。我们一般称BeanFactory为IoC容器,而称ApplicationContext为应用上下文。

    本质区别:BeanFactory是懒加载,ApplicationContext则在初始化应用上下文时就实例化所有单实例的Bean,可以指定为延迟加载。

      BeanFactory在初始化容器时,并未实例化Bean,如果Bean的某一个属性没有注入,BeanFacotry加载后,直至首次调用getBean方法才会抛出异常;而ApplicationContext则在初始化应用上下文时初始化所有单实例的Bean,这样有利于检查所依赖属性是否已经注入。综上所述,通常情况下我们首选ApplicationContext。

      由于ApplicationContext会预先初始化所有的Singleton Bean,于是在系统创建前期会有较大的系统开销,但一旦ApplicationContext初始化完成,程序后面获取Singleton Bean实例时候将有较好的性能。

    二者作用描述如下:

    1. BeanFactory负责读取bean配置文档,管理bean的加载,实例化,维护bean之间的依赖关系,负责bean的生命周期。
    2. ApplicationContext除了提供上述BeanFactory所能提供的功能之外,还提供了更完整的框架功能:
      a. 国际化支持
      b. 资源访问:Resource rs = ctx. getResource(”classpath:config.properties”), “file:c:/config.properties”
      c. 事件传递:通过实现ApplicationContextAware接口
    3. 常用的获取ApplicationContext的方法:
      FileSystemXmlApplicationContext:从文件系统或者url指定的xml配置文件创建,参数为配置文件名或文件名数组
      ClassPathXmlApplicationContext:从classpath的xml配置文件创建,可以从jar包中读取配置文件
      WebApplicationContextUtils:从web应用的根目录读取配置文件,需要先在web.xml中配置,可以配置监听器或者servlet来实现
    <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <servlet>
    <servlet-name>context</servlet-name>
    <servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
    </servlet>
    

      这两种方式都默认配置文件为web-inf/applicationContext.xml,也可使用context-param指定配置文件

    <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/myApplicationContext.xml</param-value>
    </context-param>
    

    Reference

  • 相关阅读:
    ETL的两种架构(ETL架构和ELT架构)
    SQL 优化通用方法
    数据建模
    Python Pandas Merge, join and concatenate
    Python Pandas -- Panel
    win-msys2安装使用配置
    BeyondCompare4过期解决办法
    Git本地仓库推送到别的仓库
    IDEA调试可执行JAR包
    Oracle常见问题排查
  • 原文地址:https://www.cnblogs.com/east7/p/15875901.html
Copyright © 2020-2023  润新知