bean工厂:最简单的容器,提供了基础的依赖注入支持。创建各种类型的Bean. 应用上下文(ApplicationContext):建立在bean工厂基础之上,提供系统架构服务。
beans包提供了以编程的方式管理和操控bean的基本功能,而context包下的ApplicationContext以一种更加面向框架的方式增强了BeanFactory的功能。多数用户可以采用声明的方式来使用ApplicationContext,甚至不用手动创建它,而通过ContextLoader这样的支持类,把它作为J2EE web应用的一部分自动启动。当然,我们仍然可以采用编程的方式创建一个ApplicationContext。
context包的核心是ApplicationContext接口。它由BeanFactory接口派生而来,因而提供了BeanFactory所有的功能。 为了以一种更向面向框架的方式工作以及对上下文进行分层和实现继承,context包还提供了以下的功能: 1、MessageSource, 提供国际化的消息访问 2、资源访问,如URL和文件 3、事件传播,实现了ApplicationListener接口的bean 4、载入多个(有继承关系)上下文 ,使得每一个上下文都专注于一个特定的层次,比如应用的web层
singleton: 单例 默认值 prototype: 原型,表示每次获得bean都会生成一个新的对象 request: 一次http请求有效( java web开发中) session: session级有效,表示在一个用户会话内有效(java web开发中) globalSession:表示在全局会话内有效
使用原型bean会对性能产生影响,尽量不要设置为prototype,除非有必要。
1、bean工厂介绍工厂设计模式,创建分发各种bean。配置好它们之间的协作关系,参与bean的生命周期。
BeanFactory factory = new XmlBeanFactory(new ClassPathResource("applicationContext.xml"));
bean工厂只把bean的定义信息载进来,用到的时候才实例化。 factory.getBean(“mybean”);就可得到一个bean。
2、使用应用上下文ApplicationCotext, Spring更加高级的容器。 功能强大:
- 提供文本信息解析工具,包括对国际化支持。
- 提供载入文件资源的通用方法,如图片。
- 可以向注册为监听器的bean发送事件。 在很少的情况下,使用BeanFactory,如在移动设备。
三种经常用到的实现:
- ClassPathXmlApplicationContext:从类路径中加载。
- FileSystemXmlApplicationContext:从文件系统加载。
- XmlWebApplicationContext:从web系统中加载。
ApplicationContext context = new FileSystemXmlApplicationContext("c:\foo.xml");
ApplicationContext context = new ClassPathXmlApplicationContext("foo.xml");
除了应用上下文提供的附加功能外,应用上下文与bean工厂的另一个重要区别是关于单例bean如何被加载。
BeanFactroy采用的是延迟加载形式来注入Bean的,即只有在使用到某个Bean时(调用getBean()),才对该Bean进行加载实例化,这样,我们就不能发现一些存在的spring的配置问题。而ApplicationContext则相反,它是在容器启动时,一次性创建了所有的Bean。这样,在容器启动时,我们就可以发现Spring中存在的配置错误。
3、BeanFactory 还是 ApplicationContext?简单的说:除非你有更好的理由,否则尽量使用ApplicationContext,下面是对于哪些”为什么”等等更深入的建议
ApplicationContext包含BeanFactory的所有功能。通常建议比BeanFactory优先,除非有一些限制的场合如字节长度对内存有很大的影响时(Applet)。然后,绝大多数”典型的”企业应用和系统,ApplicationContext就是你需要使用的。Spring2.0及以上版本,大量使用了link linkend=”beans-factory-extension-bpp”>BeanPostProcessor扩展(以便应用代理等功能),如果你选择BeanFactory则无法使用相当多的支持功能,如事务和AOP,这可能会导致混乱,因为配置并没有错误。
下面的功能矩阵列出了BeanFactory提供的功能和ApplicationContext提供的功能(包括其实现)。
更加详细的信息参考: Spring-中文参考手册
本文部分内容整理自网络 作者:jiankunking 出处:http://blog.csdn.net/jiankunking