ApplicationContext是一个核心接口,继承了Bean工厂接口,环境接口,事件发布器接口等。其关键作用就是:集成了SpringBoot启动过程中所需的接口资源于一体。
public interface ApplicationContext extends
EnvironmentCapable, ListableBeanFactory, HierarchicalBeanFactory,
MessageSource, ApplicationEventPublisher, ResourcePatternResolver{}
(1)功能:
-
提供可访问应用组件的Bean工厂方法,继承自ListableBeanFactory
-
具备加载文件类型资源的能力,继承自ResourceLoader
-
可将事件发布到已经注册的监听器上,继承自ApplicationEventPublisher
-
可解析消息支持国际化,继承自MessageSource
-
可以获取容器当前运行的环境,继承自EnvironmentCapable
(2)子接口:
ApplicationContextAssertProvider
ConfigurableApplicationContext
ReactiveWebApplicationContext
WebApplicationContext
WebServerApplicationContext
(3)注解方式SpringBoot程序上下文类:
注解方式/xml配置启动Spring应用程序的两个类继承图如下图所示:
源码解释:
在SpringBoot启动流程中,应用程序默认是servlet类型,加载的应用上下文类是AnnotationConfigServletWebServerApplicationContext。
//SpringBoot启动流程
public ConfigurableApplicationContext run(String... args) {
//...
context = createApplicationContext();
//...
return context;
}
//createApplicationContext方式实现
public static final String DEFAULT_SERVLET_WEB_CONTEXT_CLASS =
"org.springframework.boot."+ "web.servlet.context.AnnotationConfigServletWebServerApplicationContext";
protected ConfigurableApplicationContext createApplicationContext() {
//...
contextClass = Class.forName(DEFAULT_SERVLET_WEB_CONTEXT_CLASS);
//...
return (ConfigurableApplicationContext) BeanUtils.instantiateClass(contextClass);
}