ApplicationContext 容器的介绍

228 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第8天,点击查看活动详情

ApplicationContext 也是一种Spring IOC 容器,它是基于BeanFactory 却比BeanFactory 更高级的实现,它扩展了基本容器的功能。

我们也可以这么理解:BeanFactory 就相当于Sping 框架的心脏,相比之下,ApplicationContext 就是Spring 的完整的身躯。

Spring 给基本的IOC 容器BeanFactory 提供了XMLBeanFactory 实现;相同道理,Spring 也为ApplicationContext 类型的容器提供了如下几个具体的实现:

  1. org.springframework.ocntext.support.FileSystemXmlApplicationContext
    这个是在默认情况下,从文件系统中加载bean 定义以及相关资源的ApplicationContext 实现。
  2. org.springframework.ocntext.support.ClassPathXmlApplicationContext
    默认情况下从Classpath 加载bean 定义以及相关资源的ApplicationContext 实现。
  3. org.springframework.ocntext.support.XmlWebApplicationContext
    这个是Spring 提供的应用于Web 应用程序的ApplicationContext 实现。

ApplicationContext 除了提供BeanFactory 所支持的所有功能之外,它还有如下的额外的功能:

  • 容器默认会初始化所有的Singleton 类型的Bean,当然我们也可以通过配置取消其预初始化的功能。
  • 它继承了MessageSource,所以支持国际化。
  • 提供了便捷的资源访问功能,比如访问URL和文件。
  • 有事件机制。
  • 可以同时加载多个配置文件。
  • 提供了以声明式方式启动并创建Spring容器的功能。

额外我们需要注意的是:由于ApplicationContext 会预先初始化所有声明为Singleton 的Bean,所以在系统创建的时候会有很大的系统开销。但是相对的,在ApplicationContext初始化完成之后,程序后面获取Singleton Bean实例时候,就不需要再实例化了,所以系统就会有较好的性能。

如果我们看避免默认初始化功能,我们就可以为Bean 的lazy-init 属性设置为true,那么Spring 容器就不会预先初始化该bean。

总结

这篇文章在概念上预先介绍了一下ApplicationContext,我们可以做个预先的了解。