ApplicationContext 和 BeanFactory 的区别

 包目录不同

BeanFactory:spring-beans.jar 中 org.springframework.beans.factory.BeanFactory

ApplicationContext:spring-context.jar 中 org.springframework.context.ApplicationContext

国际化

由于 ApplicationContext 实现了 MessageResource 接口,因而具有消息处理的能力

BeanFactory 没有实现 Spring 中MessageResource接口,因此BeanFactory 是不支持国际化功能的

强大的事件机制

基本上牵涉到事件(Event)方面的设计,就离不开观察者模式

ApplicationContext 的事件机制主要通过 ApplicationEvent 和 ApplicationListener这两个接口来提供的,即当 ApplicationContext 中发布一个事件时,所有扩展ApplicationListener 的 Bean 都将接受到这个事件,并进行相应的处理。

底层资源的访问

ApplicationContext 扩展了 ResourceLoader(资源加载器)接口,从而可以用来加载多个Resource,而BeanFactory 是没有扩展 ResourceLoader

创建的方式不同

BeanFactory 通常以编程的方式被创建

ApplicationContext 能以声明的方式创建

延迟加载

(1)实例化的时间不同
BeanFactroy 采用的是延迟加载形式来注入 Bean 的,即只有在使用到某个 Bean 时(调用getBean()),才对该 Bean 进行加载实例化。这样,我们就不能发现一些存在的 spring 的配置问题
ApplicationContext 则相反,它是在容器启动时,一次性创建了所有的 Bean。这样,在容器启动时,我们就可以发现Spring 中存在的配置错误
(2)对BeanPostProcessor和BeanFactoryPostProcessor的支持
BeanFactory 和 ApplicationContext 都支持 BeanPostProcessor、BeanFactoryPostProcessor 的使用。
两者之间的区别是:BeanFactory 需要手动注册,而ApplicationContext 则是自动注册。

常用的容器

(1)ApplicationContext 类型的常用容器
ClassPathXmlApplicationContext
从 ClassPath 的 XML 配置文件中读取上下文,并生成上下文定义。应用程序上下文从程序环境变量中取得。

FileSystemXmlApplicationContext
从文件系统中的 XML 配置文件读取上下文。

XmlWebApplicationContext
从 Web 应用的 XML 文件读取上下文。例如我们在 Spring MVC使用的情况。

(2)BeanFactory 类型的常用容器
XmlBeanFactory
BeanFactory 类型的有 XmlBeanFactory,它可以根据 XML 文件中定义的内容,创建相应的Bean

 总结

BeanFactory 是 Spring 框架的基础设施,面向 Spring 本身
ApplicationContext 面向使用Spring 的开发者,相比于 BeanFactory,
ApplicationContext提供了更多面向实际开发的功能,几乎所有场合都可以直接使用
ApplicationContext,而不是底层的 BeanFactory。
 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值