BeanFactory和AppliationcContext

BeanFactory仅仅只是一个 维护bean定义以及相互依赖关系的高级工厂接口。通过BeanFactory 我们可以访问bean定义。

Resource res = new FileSystemResource("beans.xml");
BeanFactory factory = new XmlBeanFactory(res);
基本上就这些了,接着使用getBean(String) 方法就可以取得bean的实例;BeanFactory 提供的方法极其简单。 BeanFactory接口提供 了非常多的方法,但是对于我们的应用来说,最好永远不要调用它们,当然也包括 使用getBean(String)方法,这样可以避免我们对 Spring API的依赖。

ApplicationContext实现中的bean采用提前实例化(饿汉式初始化)的singleton模式。在实际需要之前创建这些bean将带来时间与内存的开销。而这样做的好处就是ApplicationContext被加载的时候可以尽早的发现一些配置的问题。不过用户也可以根据需要采用延迟实例化来替代默认的singleton模式。

ApplicationContext接口。它由BeanFactory接口派生而来,因而提供了BeanFactory所有的功能。为了以一种更向面向框架的方式工作以及对上下文进行分层和实现继承,context包还提供了以下的功能:

MessageSource, 提供国际化的消息访问

资源访问,如URL和文件

事件传播,实现了ApplicationListener接口的bean

载入多个(有继承关系)上下文 ,使得每一个上下文都专注于一个特定的层次,比如应用的web层

如果你选择BeanFactory则无法使用相当多的支持功能,如事务和AOP,这可能会导致混乱,因为配置并没有错误。

ApplicationContext比BeanFacory多的特性
自动 BeanPostProcessor 注册
自动 BeanFactoryPostProcessor 注册
便捷的 MessageSource 访问( i18n)
ApplicationEvent 发送

猜你喜欢

转载自liyixing1.iteye.com/blog/1036522