ApplicationContext
是 Spring 框架中的一个核心接口,它是 BeanFactory
的子接口,提供了更多的企业级功能。ApplicationContext
除了包含 BeanFactory
的所有功能外,还增加了以下特性:
- 国际化(I18n):提供了对消息资源(比如
MessageSource
)的访问,支持国际化。- 事件传播:提供了事件机制,允许在 bean 之间发布和接收事件(如
ApplicationEvent
)。- 统一的资源访问:提供了对资源文件(如文件和 URL)的访问,支持不同的资源加载方式(如
ResourceLoader
)。- 内置支持的不同应用上下文:如 Web 应用程序上下文。
常见的 ApplicationContext 实现类
1. ClassPathXmlApplicationContext
ClassPathXmlApplicationContext
从类路径加载 XML 配置文件来构建应用上下文。适用于基于 XML 配置的 Spring 项目。
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
2. FileSystemXmlApplicationContext
FileSystemXmlApplicationContext
从文件系统中的 XML 配置文件加载应用上下文,适用于 XML 配置文件不在类路径中的情况。
ApplicationContext context = new FileSystemXmlApplicationContext("C:/path/to/applicationContext.xml");
3. AnnotationConfigApplicationContext
AnnotationConfigApplicationContext
用于注解驱动的 Spring 配置,常与 @Configuration
和 @ComponentScan
注解配合使用。
ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
4. GenericApplicationContext
GenericApplicationContext
是一个通用的应用上下文,支持通过编程方式注册 bean 定义,非常灵活。
GenericApplicationContext context = new GenericApplicationContext();
context.registerBean(MyBean.class);
context.refresh();
5. WebApplicationContext
WebApplicationContext
是 Spring Web 应用程序上下文的专用实现,扩展了普通的 ApplicationContext
,并添加了与 web 应用程序相关的功能。通常与 ContextLoaderListener
配合使用。
6. ConfigurableApplicationContext
ConfigurableApplicationContext
是 ApplicationContext
的一个子接口,提供了更灵活的上下文管理功能,包括启动和关闭上下文的方法。
ConfigurableApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
context.start();
context.stop();
context.close();
参考资料
- Spring Framework Documentation
- Baeldung on Spring ApplicationContext
- Spring 官方文档 - ApplicationContext