持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第8天,点击查看活动详情
ApplicationContext 也是一种Spring IOC 容器,它是基于BeanFactory 却比BeanFactory 更高级的实现,它扩展了基本容器的功能。
我们也可以这么理解:BeanFactory 就相当于Sping 框架的心脏,相比之下,ApplicationContext 就是Spring 的完整的身躯。
Spring 给基本的IOC 容器BeanFactory 提供了XMLBeanFactory 实现;相同道理,Spring 也为ApplicationContext 类型的容器提供了如下几个具体的实现:
- org.springframework.ocntext.support.FileSystemXmlApplicationContext
这个是在默认情况下,从文件系统中加载bean 定义以及相关资源的ApplicationContext 实现。 - org.springframework.ocntext.support.ClassPathXmlApplicationContext
默认情况下从Classpath 加载bean 定义以及相关资源的ApplicationContext 实现。 - 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,我们可以做个预先的了解。