Spring之BeanFactory与ApplicationConText区别

    技术2022-05-19  18

    1,两者都是通过xml配置文件加载bean,ApplicationContext和BeanFacotry相比,提供了更多的扩展功能,但其主要区别在于后者是延迟加载,如果Bean的某一个属性没有注入,BeanFacotry加载后,直至第一次使用调用getBean方法才会抛出异常;而ApplicationContext则在初始化自身是检验,这样有利于检查所依赖属性是否注入;所以通常情况下我们选择使用ApplicationContext.

     

    2,BeanFactory 还是 ApplicationContext?

    简单的说:除非你有更好的理由,否则尽量使用ApplicationContext,下面是对于哪些"为什么"等等更深入的建议

    ApplicationContext包含BeanFactory的所有功能。通常建议比BeanFactory优先,除非有一些限制的场合如字节长度对内存有很大的影响时(Applet)。然后,绝大多数"典型的"企业应用和系统,ApplicationContext就是你需要使用的。Spring2.0及以上版本,大量使用了link linkend="beans-factory-extension-bpp">BeanPostProcessor扩展(以便应用代理等功能),如果你选择BeanFactory则无法使用相当多的支持功能,如事务和AOP,这可能会导致混乱,因为配置并没有错误。

    下面的功能矩阵列出了BeanFactory提供的功能和ApplicationContext提供的功能(包括其实现)。 

     

    Feature Matrix特性表

    特性                                                   BeanFactory   ApplicationContext Bean 实例化/装配                                  Yes                 Yes

    自动 BeanPostProcessor 注册                  No                  Yes

    自动 BeanFactoryPostProcessor 注册        No                  Yes

    便捷的 MessageSource 访问( i18n)           No                  Yes

    ApplicationEvent 发送                            No                  Yes

     

     


    最新回复(0)