BeanFacotry
BeanFactory提供了一种先进的配置机制来管理任何种类bean(对象),这种配置机制考虑到任何一种可能的存储方式。
ApplicationContext
1.建立在BeanFactory,具有BeanFactory的所有功能和行为
2.MessageSource, 提供国际化的消息访问
3.资源访问,如URL和文件
4.事件传播
5.载入多个(有继承关系)上下文 ,使得每一个上下文都专注于一个特定的层次,比如应用的web层
不同点
BeanFactory是延迟加载,如果Bean的某一个属性没有注入,BeanFacotry加载后,直至第一次使用调用getBean方法才会抛出异常。
ApplicationContext则在初始化自身是检验,这样有利于检查所依赖属性是否注入;所以通常情况下我们选择使用ApplicationContext。
参考官方文档
特性 | BeanFactory | ApplicationContext |
---|---|---|
Bean instantiation/wiring(bean 实例化/装配) | yes | yes |
Integrated lifecycle management (集成生命周期管理) | no | yes |
Automatic BeanPostProcessor registration(自动 BeanPostProcessor 注册) | no | yes |
Automatic BeanFactoryPostProcessor registration(自动 BeanFactoryPostProcessor 注册) | no | yes |
Convenient MessageSource access (for internalization) (便捷的 MessageSource 访问( i18n) ) | no | yes |
Built-in ApplicationEvent publication mechanism(ApplicationEvent 发送) | no | yes |
关系
(1)BeanFactory提供了配置框架和基本的功能
(2)ApplicationContext建立在BeanFactory之上,并增加了其他的功能
(3)一般来说,ApplicationContext是BeanFactory的完全超集, 任何BeanFactory功能和行为的描述也同样被认为适用于ApplicationContext
我们该用BeanFactory还是ApplicationContent
延迟实例化的优点:(BeanFactory)
应用启动的时候占用资源很少;对资源要求较高的应用,比较有优势;
不延迟实例化的优点: (ApplicationContext)
- 所有的Bean在启动的时候都加载,系统运行的速度快;
- 在启动的时候所有的Bean都加载了,我们就能在系统启动的时候,尽早的发现系统中的配置问题
- 建议web应用,在启动的时候就把所有的Bean都加载了。(把费时的操作放到系统启动中完成)
[这段内容转自blog:https://blog.csdn.net/yjc0403/article/details/84831532]
网友评论