BeanFactory 和 ApplicationContext有什么区别呢?
下文笔者讲述BeanFactory 和 ApplicationContext的区别说明,如下所示
BeanFactory 和 ApplicationContext的区别
BeanFactory和ApplicationContext
是Spring的两大核心接口
都可以作为Spring的容器
其中ApplicationContext是BeanFactory的子接口
BeanFactory和ApplicationContext依赖关系说明
BeanFactory:
Spring里面最底层的接口
包含各种Bean的定义
读取bean配置文档
管理bean的加载、实例化,控制bean的生命周期
维护bean之间的依赖关系
称之为"低级容器"
ApplicationContext接口:
作为BeanFactory的派生
可以称之为"高级容器"
除提供BeanFactory所具有的功能外
还提供更完整的框架功能:
继承MessageSource,因此支持国际化
统一的资源文件访问方式
提供在监听器中注册bean的事件
同时加载多个配置文件
载入多个(有继承关系)上下文
使得每一个上下文都专注于一个特定的层次
如:
应用的web层
加载方式
BeanFactroy
采用的是延迟加载形式来注入Bean
即只有在使用到某个Bean时(调用getBean())
才对该Bean进行加载实例化
采用此种方式,
我们就不能发现一些存在的Spring的配置问题
如Bean中某一个属性没有注入
BeanFacotry加载后
直到第一次使用调用getBean方法才会抛出异常
ApplicationContext:
在容器启动时
一次性创建所有Bean
在容器启动时
我们就可以发现Spring中存在的配置错误
这样有利于检查所依赖属性是否注入
ApplicationContext启动后预载入所有的单实例Bean
通过预载入单实例bean
相对于BeanFactory
ApplicationContext 唯一的不足是占用内存空间
当应用程序配置Bean较多时
程序启动稍稍慢一些
创建方式
BeanFactory
常使用编程的方式被创建
ApplicationContext
以声明的方式创建
如:
使用ContextLoader
注册方式
BeanFactory和ApplicationContext
都支持BeanPostProcessor、BeanFactoryPostProcessor的使用
两者之间的区别是:
BeanFactory需要手动注册
ApplicationContext则是自动注册
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。


