请解释 Spring 框架中 ApplicationContext 的概念及其在容器中的作用。
考察说明
考查对 Spring 核心容器接口 ApplicationContext 的理解,包括其职责、主要实现和与 BeanFactory 的关系。
回答思路
- 【回答框架 1】ApplicationContext 是 Spring IoC 容器的核心接口,继承自 BeanFactory,负责管理 Bean 的生命周期、依赖注入和配置加载。它提供了比 BeanFactory 更完整的企业级功能,包括事件发布、国际化、资源加载和应用上下文生命周期管理。
- 【回答框架 2】容器启动时,ApplicationContext 通过读取配置元数据(如 XML、注解或 JavaConfig)实例化所有单例 Bean,完成属性填充、初始化和循环依赖处理。常用实现类有 ClassPathXmlApplicationContext、FileSystemXmlApplicationContext 和 AnnotationConfigApplicationContext。
- 【回答框架 3】与 BeanFactory 相比,ApplicationContext 在启动时预实例化单例 Bean(默认 eager 初始化),支持事件监听器和国际化消息,而 BeanFactory 采用延迟加载。对于大多数应用,推荐使用 ApplicationContext 子类作为容器入口。
- 【回答框架 4】Web 应用中常见的是 WebApplicationContext,由 DispatcherServlet 或 ContextLoaderListener 初始化,支持分层上下文,例如根上下文与子上下文共享 Bean 定义。
- 【关键点 1】ApplicationContext 是 BeanFactory 的增强版,提供企业级特性。
- 【关键点 2】默认预加载单例 Bean,使用 eager 初始化。
- 【关键点 3】支持事件发布、国际化、资源加载和更灵活的配置方式。
- 【关键点 4】常见实现包括 ClassPathXmlApplicationContext 和 AnnotationConfigApplicationContext。
- 【关键点 5】Web 环境中使用 WebApplicationContext,支持父子上下文分层。
- 【易错点 1】误认为 BeanFactory 与 ApplicationContext 功能等同,忽略预加载、事件和国际化等差异。
- 【易错点 2】混淆创建方式,XML 和注解配置对应的实现类不同。
- 【易错点 3】未区分普通应用与 Web 应用的上下文类型,导致加载路径错误。