疯狂java


您现在的位置: 疯狂软件 >> 新闻资讯 >> 正文

Spring核心技术之浅谈BeanFactory


 

   

  BeanFactory

  是Spring IoC功能的潜在基础,但是现在

  BeanFactory

  一般仅仅用于直接集成第三方的框架,对于大多数的Spring用户来说,

  BeanFactory

  已经算是一个历史了。

  BeanFactory

  以及其相关的接口,包括

  BeanFactoryAware

  ,

  InitializingBean

  ,

  DisposableBean

  ,出于跟大量第三方框架兼容的问题,仍然存在。因为很多时候,第三方组件还不能使用形如

  @PostConstruct

  或者

  @PreDestroy

  这类的注解,为了继续支持JDK1.4以及避免依赖于JSR-250标准。

  下面将描述

  BeanFactory

  和

  ApplicationContext

  之间的一些异同以及如何通过典型的单例查找访问IoC容器。

  BeanFactory

  还是

  ApplicationContext

  ?

  最好还是使用

  ApplicationContext

  除非真的有不得不使用

  BeanFactory

  的理由。

  因为

  ApplicationContext

  包含了

  BeanFactory

  的所有功能,所以它更优于

  BeanFactory

  。只有少数情况,比如嵌入式应用环境中,运行应用的设备资源受限,内存要求更为严格,仅仅差几k几十k内存开销都会对应用产生影响的情况,才需要权衡是否使用

  BeanFactory

  。所以,在绝大多数的典型情况之中,开发者肯定还是使用

  ApplicationContext

  最好。Spring在

  BeanPostProcessor

  这个扩展点上是重度用户,如果开发者仅仅使用

  BeanFactory

  的话,相当多的功能,诸如事务,AOP都将不会生效。这个时候,就会让人很疑惑,因为配置都是正确的。

  下表列出了所有

  BeanFactory

  和

  ApplicationContext

  接口和实现的一些特性:

  Feature

  BeanFactory

  ApplicationContext

  Bean的实例化和装载 支持 支持

  自动的

  BeanPostProcessor

  注册 不支持 支持

  自动的

  BeanFactoryPostProcessor

  注册 不支持 支持

  MessageSource