Spring源码学习--Spring中的BeanFactory和ApplicationContext

文章来源

https://www.zhihu.com/question/38597460?sort=created
https://blog.csdn.net/u011202334/article/details/51509235
https://blog.csdn.net/hi_kevin/article/details/7325554




一 第一种说法

Spring中的BeanFactory和ApplicationContext相比,提供了更多的扩展功能,但是这还不是主要的区别,主要区别在于BeanFactory是延迟加载,举个例子:如果Bean没有完全注入,BeanFactory加载后,会在你第一次调用getBean方法时才会抛出异常;而ApplicationContext会在初始化的时候就加载并且检查,这样的好处是可以及时检查依赖是否完全注入;所以通常来说我们会选择使用ApplicationContext.

BeanFactory和ApplicationContext都支持BeanPostProcessor\BeanFactoryPostProcessor的使用,但是两者之间的区别在于:BeanFactory需要手动注册,而ApplicationContext则是自动注册的.

BeanFactory是Spring中相当古老的Factory了,比如说XmlBeanFactory就是一种相当电影的BeanFactory.所以原始的BeanFactory就无法支持诸如AOP\WEB应用等许多插件

ApplicationContext接口是有BeanFactory接口派生出来的,所以提供了BeanFactory的所有功能.ApplicationContext是一种更加面向框架的工作方式以及对上下文进行分层和实现继承.并且ApplicationContext还额外提供了一下功能.

  • MessageSource:提供国际化的消息访问
  • 资源访问:如URL和文件
  • 事件传播
  • 载入多个(有继承关系)上下文,使得每一个上下文都专注于一个特定的层次,比如应用的web层



BeanFacotry是spring中比较原始的Factory。如XMLBeanFactory就是一种典型的BeanFactory。原始的BeanFactory无法支持spring的许多插件,如AOP功能、Web应用等。

ApplicationContext接口,它由BeanFactory接口派生而来,因而提供BeanFactory所有的功能。ApplicationContext以一种更向面向框架的方式工作以及对上下文进行分层和实现继承,ApplicationContext包还提供了以下的功能:
• MessageSource, 提供国际化的消息访问
• 资源访问,如URL和文件
• 事件传播
• 载入多个(有继承关系)上下文 ,使得每一个上下文都专注于一个特定的层次,比如应用的web层

1.利用MessageSource进行国际化

BeanFactory是不支持国际化功能的,因为BeanFactory没有扩展Spring中MessageResource接口。相反,由于ApplicationContext扩展了MessageResource接口,因而具有消息处理的能力(i18N).

2.强大的事件机制(Event)

基本上牵涉到事件(Event)方面的设计,就离不开观察者模式。不明白观察者模式的朋友,最好上网了解下。因为,这种模式在java开发中是比较常用的,又是比较重要的。 ApplicationContext的事件机制主要通过ApplicationEvent和ApplicationListener这两个接口来提供的,和java swing中的事件机制一样。即当ApplicationContext中发布一个事件的时,所有扩展了ApplicationListener的Bean都将会接受到这个事件

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值