SpringFramework核心技术一(IOC:BeanFactory)

什么是BeanFactory

这BeanFactory为Spring的IoC功能提供了基础,但它只能直接用于与其他第三方框架的集成,现在对于Spring的大多数用户来说,它本质上是历史性的。在BeanFactory与相关的接口,如BeanFactoryAware,InitializingBean,DisposableBean,仍然存在于Spring为向后兼容性与大量与Spring集成第三方框架的目的。通常第三方组件不能使用更多的现代等价物,例如@PostConstruct或@PreDestroy为了避免依赖JSR-250。


一、使用BeanFactory 还是 ApplicationContext?

使用ApplicationContext,除非你有更好的理由,不去使用他?

由于ApplicationContext包含了所有功能BeanFactory,所以比BeanFactory更建议使用ApplicationContext。除此之外,除了少数情况外,例如在资源受限的设备上运行的嵌入式应用程序,这些应用程序的内存消耗可能很重要,少数几千字节可能会产生差异,可以使用BeanFactory。但是,对于大多数典型的企业应用程序和系统,这ApplicationContext是您将要使用的。Spring 大量使用BeanPostProcessor扩展点(以影响代理等)。如果您仅使用普通BeanFactory,则交易和AOP等相当一部分支持将不会生效,至少在您没有采取某些额外步骤的情况下不会生效。这种情况可能会令人困惑,因为配置没有任何问题。

下表列出了提供的功能BeanFactory和 ApplicationContext接口和实现。
功能矩阵:

特征BeanFactoryBeanFactory
Bean实例化/布线
自动BeanPostProcessor注册没有
自动BeanFactoryPostProcessor注册没有
方便的MessageSource访问(国际化)没有
ApplicationEvent 出版物没有

要使用实现明确注册bean后处理器BeanFactory,您需要编写如下代码:

DefaultListableBeanFactory factory = new DefaultListableBeanFactory();
// populate the factory with bean definitions

// now register any needed BeanPostProcessor instances
MyBeanPostProcessor postProcessor = new MyBeanPostProcessor();
factory.addBeanPostProcessor(postProcessor);

// now start using the factory

要BeanFactoryPostProcessor在使用BeanFactory 实现时明确注册,您必须编写如下代码:

DefaultListableBeanFactory factory = new DefaultListableBeanFactory();
XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(factory);
reader.loadBeanDefinitions(new FileSystemResource("beans.xml"));

// bring in some property values from a Properties file
PropertyPlaceholderConfigurer cfg = new PropertyPlaceholderConfigurer();
cfg.setLocation(new FileSystemResource("jdbc.properties"));

// now actually do the replacement
cfg.postProcessBeanFactory(factory);

在这两种情况下,显式注册步骤都很不方便,这是 绝大多数Spring支持的应用程序ApplicationContext中优先于各种实现的各种实现的一个原因BeanFactory,特别是在使用BeanFactoryPostProcessors和BeanPostProcessors时。这些机制实现了重要的功能,如资产占位符替换和AOP。

结语:在这里只需要知道ApplicationContext包含了BeanFactory的所有功能就可以了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值