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

面试题|Spring中BeanFactory与ApplicationContext的本质区别和作用的更多相关文章

  1. Spring中BeanFactory与ApplicationContext的区别

    BeanFactory:Bean工厂接口,是访问Spring Bean容器的根接口,基本Bean视图客户端.从其名称上即可看出其功能,即实现Spring Bean容器的读取. ApplicationC ...

  2. Spring中BeanFactory和ApplicationContext的区别

    1. BeanFactory负责读取bean配置文档,管理bean的加载,实例化,维护bean之间的依赖关系,负责bean的生命周期. 2. ApplicationContext除了提供上述BeanF ...

  3. Spring中加载ApplicationContext.xml文件的方式

    Spring中加载ApplicationContext.xml文件的方式 原文:http://blog.csdn.net/snowjlz/article/details/8158560 1.利用Cla ...

  4. Spring中BeanFactory与FactoryBean的区别

    在Spring中有BeanFactory和FactoryBean这2个接口,从名字来看很相似,比较容易搞混. 一.BeanFactory BeanFactory是一个接口,它是Spring中工厂的顶层 ...

  5. spring:Beanfactory和ApplicationContext、BeanFactory 和 FactoryBean

    1.Beanfactory和ApplicationContext有什么区别 ApplicationContext (1)在配置文件加载后创建bean 利用debug方式,在Student类的无参构造方 ...

  6. 【Java面试】Spring中 BeanFactory和FactoryBean的区别

    一个工作了六年多的粉丝,胸有成竹的去京东面试. 然后被Spring里面的一个问题卡住,唉,我和他说,6年啦,Spring都没搞明白? 那怎么去让面试官给你通过呢? 这个问题是: Spring中Bean ...

  7. Spring中<ref local=""/>与<ref bean=""/>区别

    小 Spring中<ref local=""/>与<ref bean=""/>区别 (2011-03-19 19:21:58) 转载▼ ...

  8. jsp中的contentType与pageEncoding的区别和作用

    jsp中的contentType与pageEncoding的区别和作用   <%@ page contentType="text/html; charset=utf-8" p ...

  9. 7 -- Spring的基本用法 -- 4... 使用 Spring 容器:Spring 容器BeanFactory、ApplicationContext;ApplicationContext 的国际化支持;ApplicationContext 的事件机制;让Bean获取Spring容器;Spring容器中的Bean

    7.4 使用 Spring 容器 Spring 有两个核心接口:BeanFactory 和 ApplicationContext,其中ApplicationContext 是 BeanFactory ...

  10. Spring中BeanFactory与FactoryBean到底有什么区别?

    一.BeanFactory BeanFactory是一个接口,它是Spring中工厂的顶层规范,是SpringIoc容器的核心接口,它定义了getBean().containsBean()等管理Bea ...

随机推荐

  1. deepseek:如何用php写微信公众号订阅回复事件

    以下是使用 PHP 重写的微信公众号订阅事件回复的示例代码.这个代码实现了用户订阅(关注)公众号时,自动回复一条欢迎消息. PHP 实现代码 <?php // 微信公众平台的Token defi ...

  2. es6 形参的陷阱

    先看代码: var x = 1; function s (a,y = function (){ x = 2 }){     var x = 1;     y();     console.log(x) ...

  3. linux ssh 免密登录

    1.服务器端开启密钥登录模式 $ vim /etc/ssh/sshd_config # 是否允许 root 远程登录 PermitRootLogin yes # 密码登录是否打开 PasswordAu ...

  4. laradock 更改 mysql 版本

    # 修改 .env 文件 MYSQL_VERSION=5.7 # 默认为 latest #停止mysql容器 docker-compose stop mysql # 删除旧数据库数据 rm -rf ~ ...

  5. Shell脚本实现服务器多台免密

    简介 本脚本(auto_ssh_batch.sh)用于在多台主机之间快速配置SSH免密登录,并支持远程传输脚本/文件及执行命令.通过 pass 文件提供统一认证凭据,通过 nodes 文件定义目标主机 ...

  6. 【C语言】转义字符及其对应英文

    对于很多人来说,用转义字符都是熟能生巧,而不清楚为什么是那样的转义字符,所以我在这列了一个表,翻译了其对应的英文. 转义字符分为一般转义字符.八进制转义字符.十六进制转义字符. 一般转义字符:\0. ...

  7. 离线版nRF Connect for Desktop安装方法

    首先确保两台电脑都安装了nRF Connect for Desktop 先在一台能连网的电脑上安装自己想要的App 然后把APP拷贝到没有网的电脑上 从%USERPROFILE%\.nrfconnec ...

  8. 学习EXTJS6(10)面向对象的基础框架-2【统一的组件模型】很重要

    用到ExtJS,UNIGUI是以ExtJS为基础的框架.因此掌握基础组件模型太重要了.确实就是让自己知道其所以然. Ext中所有可视组件都继承自Ext.Component. 1.Ext.Compone ...

  9. 0x04 数学知识

    数学知识 数论 质数 试除法判定质数 \(O(\sqrt n)\) bool is_prime(int x) { if (x < 2) return false; for (int i = 2; ...

  10. .net WorkFlow 流程传阅

    WikeFlow官网:www.wikesoft.com WikeFlow学习版演示地址:workflow.wikesoft.com WikeFlow学习版源代码下载:https://gitee.com ...