选择BeanFactory还是ApplicationContext?

BeanFactory和ApplicationContext

本章介绍BeanFactory和ApplicationContexctory和容器级别之间的差异和影响。
从容器的角度来说,BeanFactory和ApplicationContext都能当做容器去使用。
官方文档推荐使用ApplicationContext或者使用AnnotationConfigApplicationContext或者是他的子类org.springframework.context.annotation.AnnotationConfigApplicationContext作为自定义引导类。
ApplicationContext包含BeanFactory的所有功能,并在容器的基础上做了很多扩展,比如集成bean生命周期管理,包括自动注、册国际化、内置的发布机制。
对于许多扩展容器功能,例如注解处理和AOP代理, BeanPostProcessor扩展点是必不可少的。如果仅使用普通的DefaultListableBeanFactory,则默认情况下不会检测到并激活此类后置处理器。

特点Bean FactoryApplicationContext
Bean Bean实例化/装配支持支持
集成生命周期管理不支持支持
自动注册BeanPostProcessor不支持支持
自动注册BeanFactoryPostProcessor不支持支持
Messagesource 国际化不支持支持
内置ApplicationEvent 发布机制不支持支持

使用BeanFactory注册BeanPostProcessor,需要手动去注册Bean的后置处理器:

 public static void main(String[] args) {
        DefaultListableBeanFactory factory = new DefaultListableBeanFactory();
        //自動裝配后置处理器
        factory.addBeanPostProcessor(new AutowiredAnnotationBeanPostProcessor());
        // 自定义bean的后置处理器
        factory.addBeanPostProcessor(new MyBeanPstProcessor());
    }

如果使用BeanFactory注册BeanFactoryPostProcessor,需要手动去注册BeanFactory的后置处理器:

public static void main(String[] args) {
        DefaultListableBeanFactory factory = new DefaultListableBeanFactory();
        XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(factory);
        reader.loadBeanDefinitions(new FileSystemResource("beans.xml"));

        // 从配置文件中读取属性
        PropertyPlaceholderConfigurer cfg = new PropertyPlaceholderConfigurer();
        cfg.setLocation(new FileSystemResource("jdbc.properties"));

        cfg.postProcessBeanFactory(factory);
    }

在这两种情况下,显示使用BeanFactory作为容器使用很麻烦,这就是为什么各种ApplicationContext变体优先于Spring支持的应用程序中的普通DefaultListableBeanFactory, 尤其是在典型企业设置中依赖BeanFactoryPostProcessor 和 BeanPostProcessor实例来扩展容器功能时。

AnnotationConfigApplicationContext具有注册的所有常见注解后置处理器,并且可以通过配置注解(例如@EnableTransactionManagement)在封面下引入其他处理器。 在Spring的基于注解的配置模型的抽象级别,bean的后置处理器的概念变成仅仅是内部容器细节。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值