Spring——ApplicationContxt解读

BeanFactory 和 ApplicationContext

Application由BeanFactory派生而来,提供了更多面向实际的功能。

我们一般称BeanFactory为IoC容器,而称ApplicationContext为应用上下文。

对于BeanFactory 和 ApplicationContext的用途:

  • BeanFactory是Spring框架的基础设施,面向Spring本身。
  • ApplicationContext面向使用Spring框架的开发者,几乎所有的应用场合都可以直接使用Application而非底层的BeanFactory。

spring Ioc容器的实现,从根源上是beanfactory,但真正可以作为一个可以独立使用的ioc容器还是DefaultListableBeanFactory

结构

BeanFactory负责配置、创建、管理Bean。

Application继承了HierachicalBeanFactory和ListableBeanFactory接口,在此基础上,还通过其他接口扩展了BeanFactory的功能。

这些接口如下:

  • ApplicationEventPublisher:让容器拥有发布应用上下文事件的功能,包括容器的启动事件、关闭事件等。
  • MessageSource:为应用提供i18N国际化消息访问的功能
  • ResourcePatternResolver:加载资源,可以通过带前缀的Ant风格的资源文件路径装载Spring的配置文件
  • LifeCycle:该接口提供start()和stop()方法,主要用于控制异步处理的过程,以达到管理和控制JMX、任务调度等目的

ConfigurableApplicationContext扩展于ApplicationContext,主要新增了两个方法 refresh()和close(),让Application具有启动、刷新、关闭应用上下文的能力。

初始化

ApplicationContext的初始化和BeanFactory初始化有一个重大区别:

  • BeanFactory在初始化容器时,并没有实例化Bean,直到第一次访问某个Bean时才实例化目标Bean。
  • ApplicationContext会在初始化应用上下文时就实例化所有单实例的Bean。

实现类

  • AnnotationConfigApplicationContext:从一个或多个基于java的配置类中加载上下文定义,适用于java注解的方式。
  • ClassPathXmlApplicationContext:从类路径下的一个或多个xml配置文件中加载上下文定义,适用于xml配置的方式。
  • FileSystemXmlApplicationContext:从文件系统下的一个或多个xml配置文件中加载上下文定义,也就是说系统盘符中加载xml配置文件。
  • AnnotationConfigWebApplicationContext:专门为web应用准备的,适用于注解方式。
  • XmlWebApplicationContext:从web应用下的一个或多个xml配置文件加载上下文定义,适用于xml配置方式。
文章目录
  1. 1. BeanFactory 和 ApplicationContext
  2. 2. 结构
  3. 3. 初始化
  4. 4. 实现类
|