1.Application基本介绍

1.1.BeanFactory和ApplicationContext的对别

Feature BeanFactory ApplicationContext
Bean instantiation/wiring —— Bean的实例化和属性注入 Yes Yes
Integrated lifecycle management —— 生命周期管理 No Yes
Automatic BeanPostProcessor registration —— Bean后置处理器的支持 No Yes
Automatic BeanFactoryPostProcessor registration —— BeanFactory后置处理器的支持 No Yes
Convenient MessageSource access (for internalization) —— 消息转换服务(国际化) No Yes
Built-in ApplicationEvent publication mechanism —— 事件发布机制(事件驱动) No Yes

2.ApplicationContext和它的上下辈们3.ApplicationContext - 图2

2.1Application的基本介绍

Application是中央接口,他提供了一个概念:重新加载,
Application 提供了如下功能

  • 用于访问应用程序组件的 Bean 工厂方法。继承自 ListableBeanFactory 。
  • 以通用方式加载文件资源的能力。继承自 ResourceLoader 接口。
  • 能够将事件发布给注册的监听器。继承自 ApplicationEventPublisher 接口。
  • 解析消息的能力,支持国际化。继承自 MessageSource 接口。
  • 从父上下文继承。在子容器中的定义将始终优先。例如,这意味着整个 Web 应用程序都可以使用单个父上下文,而每个 servlet 都有其自己的子上下文,该子上下文独立于任何其他 servlet 的子上下文。

    2.2ConfigurableApplicationContext提供了可配置的可能

    它是一个支持 SPI 的接口,它会被大多数(如果不是全部)应用程序上下文的落地实现。除了 ApplicationContext 接口中的应用程序上下文客户端方法外,还提供了用于配置应用程序上下文的功能。
    ConfigurableApplicationContext 本身扩展了一些方法,但是它一般情况下不希望让咱开发者调用,而是只调用启动(refresh)和关闭(close)方法。注意这个一般情况是在程序运行期间的业务代码中,但如果是为了定制化 ApplicationContext 或者对其进行扩展,ConfigurableApplicationContext 的扩展则会成为切入的主目标。

    2.3EnvironmentCapable(特定能力)

    2.4MessageSource(国际化)

    2.5ResourcePatternResolver(根据特定的路径去解析资源文件

    can be checked whether it implements this extended interface too.
    它是一个策略接口,用于将位置模式(例如,Ant 样式的路径模式)解析为 Resource 对象。 这是 ResourceLoader 接口的扩展。可以检查传入的 ResourceLoader(例如,在上下文中运行时通过 ResourceLoaderAware 传入的 ApplicationContext )是否也实现了此扩展接口。

    2.ApplicationContext的实现类们

    3.ApplicationContext - 图3
    3.ApplicationContext - 图4