spring的核心组件:一、BeanFanctory与ApplicationContext
二、spring bean配置基本结构
一、BeanFanctory与ApplicationContext
1-1、在Spring中,那些组成应用的主体(backbone)及由Spring IoC容器所管理的对象被称之为bean。简单地讲,bean就是由Spring容器初始化、装配及被管理的对象,
除此之外,bean就没有特别之处了(与应用中的其他对象没有什么区别)。而bean定义以及bean相互间的依赖关系将通过配置元数据来描述。
1-2、org.springframework.beans.factory.BeanFactory是Spring IoC容器的实际代表者,IoC容器负责容纳此前所描述的bean,并对bean进行管理;
在Spring中,BeanFactory是IoC容器的核心接口。它的职责包括:实例化、定位、配置应用程序中的对象及建立这些对象间的依赖;
1-3、Spring为我们提供了许多易用的BeanFactory实现,XmlBeanFactory就是最常用的一个。
beans包提供了以编程的方式管理和操控bean的基本功能,而context包下的ApplicationContext以一种更加面向框架的方式增强了BeanFactory的功能。多数用户可以采用声明的方式来使用ApplicationContext,甚至不用手动创建它,而通过ContextLoader这样的支持类,把它作为J2EE web应用的一部分自动启动。当然,我们仍然可以采用编程的方式创建一个ApplicationContext context包的核心是ApplicationContext接口。它由BeanFactory接口派生而来,因而提供了BeanFactory所有的功能。为了以一种更向面向框架的方式工作以及对上下文进行分层和实现继承,context包还提供了以下的功能:
1)MessageSource, 提供国际化的消息访问
2)资源访问,如URL和文件
3)事件传播,实现了ApplicationListener接口的bean
4)载入多个(有继承关系)上下文 ,使得每一个上下文都专注于一个特定的层次,比如应用的web层
由于ApplicationContext包括了BeanFactory所有的功能,所以通常建议优先采用ApplicationContext。除了一些受限的场合比如内存的消耗可能很关键,过多的内存占用可能导致反应速度下降。
BeanFactory与ApplicationContext的其他区别:
延迟加载:BeanFactroy采用的是延迟加载形式来注入Bean的,即只有在使用到某个Bean时(调用getBean()),才对该Bean进行加载实例化,这样,我们就不能发现一些存在的spring的配置问题。而ApplicationContext则相反,它是在容器启动时,一次性创建了所有的Bean。这样,在容器启动时,我们就可以发现Spring中存在的配置错误
BeanPostProcessor/BeanFactoryPostProcessor:BeanFactory和ApplicationContext都支持BeanPostProcessor、BeanFactoryPostProcessor的使用,但两者之间的区别是:BeanFactory需要手动注册,而ApplicationContext则是自动注册
二、spring bean配置基本结构
到目前为止,基于XML的配置是最常用到的Spring Bean配置元数据格式 需要注意,XML并不是唯一的描述格式。Spring IoC容器在这一点上是完全开放的。
Spring支持三种配置方式:
1)XML格式
2)Java属性文件格式
3)使用Spring公共API编程实现
Spring IoC容器可以通过多种途径来加载元数据配置文件,比如本地文件系统、Java CLASSPATH等