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则是自动注册
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。