Spring 框架的 BeanFactory 和 ApplicationContext 简述

来源:互联网 发布:python for openwrt 编辑:程序博客网 时间:2024/05/17 23:16

原创文章,转载请注明出处。

BeanFactory 是 Spring 框架最核心的接口,它提供了高级 IoC 的配置机制。BeanFactory 使管理不同的 Java 对象成为了可能。而 ApplicationContext 建立在 BeanFactory 基础之上,提供了更多面向应用的功能,它提供了国际化支持和框架事件体系,更易于创建实际应用。一般称 BeanFactory 为 IoC 容器,而称 ApplicationContext 为应用上下文。BeanFactory 是 Spring 框架的基础设施,是面向 Spring 本身的。而 ApplicationContext 则是面向使用 Spring 框架的开发者们的。


一、BeanFactory 是一个类工厂,可以创建并管理各种类的对象。Spring 称这些创建和管理的 Java 对象为 Bean。

1、BeanFactory 的类体系结构如下:

(1)XmlBeanFactory 

(2)ListableBeanFactory 定义了访问容器中 Bean 的基本信息的若干方法,比如查看 Bean 的个数,获取某一类型的 Bean 的配置名称,或者查看容器中是否包含某一 Bean 等等方法。

(3)HierarhicalBeanFactory 是父子级联 IoC 容器的接口,子容器可以通过接口方法访问父容器。

(4)ConfigurableBeanFactory 是一个重要的接口,增强了 IoC 容器的可定制性,它定义了设置类装载器、属性编辑器、容器初始化后置处理器等等方法。

(5)AutowireCapableBeanFactory 定义了将容器中的 Bean 按照某种规则,比如按照名称匹配,按照类型匹配等等来进行自动装配的方法。

(6)SingletonBeanFactory 定义了允许运行期间向容器注册单实例 Bean 的方法。

(7)BeanDefinitionRegistry,在Spring 配置文件中每一个 Bean 的节点元素,在Spring 容器里面都通过一个 BeanDefinition 对象来表示,它描述了 Bean 的配置信息。而 BeanDefinitionRegistry 提供了向容器手工注册 BeanDefinition 对象的方法。

2、BeanFactory 的初始化顺序:

(1)创建配置文件;

(2)装载配置文件;

(3)启动 IoC 容器;

(4)获取 Bean 实例(getBean())。

*注意:

1、通过 BeanFactory 启动 IoC 容器时,并不会初始化配置文件当中定义的 Bean,初始化的动作发生在第一次调用某个 Bean 的时候。对于单实例的 Bean 来说,BeanFactory 会缓存 Bean 的实例,所以第二次使用 getBean() 方法时,可以直接从 IoC 容器的缓存中来获取 Bean 的实例了。而 ApplicationContext 在初始化应用上下文时,就已经实例化所有单实例的 Bean。因此,ApplicationContext 的初始化时间会比 BeanFactory 的时间要稍微长一些。

2、在初始化 BeanFactory 时,必须为它提供一种日志框架。我们使用的是 log4j,即在类路径下提供 log4j 的配置文件,这样启动 Spring 容器时才不会报错。


二、ApplicationContext 由 BeanFactory 派生而来,提供了更多面向实际应用的功能。在 BeanFactory 中,很多功能需要以编程的方式实现,而在 ApplicationContext 中则可以通过配置的方式来实现。

1、ApplicationContext 的具体实现类:

(1)ClassPathXmlApplicationContext,它默认从类路径下加载配置文件。

(2)FileSysytemXmlApplicationContext,它默认从文件系统中加载配置文件。

(3)ConfigurableApplicationContext,它扩展于 ApplicationContext,它新增了两个主要的方法,refresh() 和 close(),这让ApplicationContext 具有启动、刷新、关闭应用上下文的能力。在应用上下文关闭的情况下,来 refresh(),即可启动应用上下文。在已经启动的状态下,调用 refresh() 方法则可以清除缓存,并且重新装载配置信息。而调用 close() 方法则可以关闭应用上下文。

2、ApplicationContext 的扩展接口:

(1)ApplicationEventPublisher

(2)MessageSource

(3)ResourcePatternResolver

(4)LifeCycle

3、和 BeanFactory 初始化相似,ApplicationContext 的初始化也很简单,根据配置文件路径不同可以选择不同的实现类加载:ClassPathXmlApplicationContext、FileSysytemXmlApplicationContext。




0 0
原创粉丝点击