ApplicationContext介绍
applicationContext即应用程序上下文。也就是我们常说的spring容器,只不过在spring容器的基础之上还提供了一些其他的功能。我们可以根据下图ApplicationContext接口注释上先从宏观上梳理下ApplicationContext的主要功能。
1.首先当然是最重要的作为spring的容器,可以访问应用的各个组件,该功能继承自ListableBeanFactory接口。
2.能够加载资源文件,该功能继承自ResourceLoader接口
3.能够发布事件到已经注册好的监听器上,该功能继承自ApplicationEventPublisher接口
4.能够解析消息,支持国际化。该功能继承自MessageSource接口。
5.对于web应用:每个servlet都有一个自己的context,继承自父context。其中父context可以供整个web程序使用。对于单个servlet的子context,在对应servlet中优先使用。
6.再根据ApplicationContext继承了EnvironmentCapable接口可知:ApplicationContext还能够获取对应环境变量与系统变量(但springboot实际上并不是通过这个接口来获取环境变量的,而是通过SpringApplication自带的方法获取)。
ApplicationContext的继承关系
首先介绍下两个顶级的接口:
ApplicationContext接口:用于获取属性的接口。
ConfigurableApplicationContext接口:继承了ApplicationContext接口,用于设置属性值的接口。
其次是上面两个接口的实现类,以及扩展接口:
AbstractApplicationContext抽象类:实现以上两个接口的功能,获取以及设置属性值。
WebApplicationContext接口:spring提供的用于创建web应用时获取属性的接口
ConfigurableWebApplicationContext接口:用于设置属性值的接口
WebServerApplicationContext接口:springBoot提供的用于创建web应用时获取属性的接口
ConfigurableWebServerApplicationContext接口:用于设置属性值的接口
ReactiveWebApplicationContext接口:springBoot提供的用于创建reactive应用时获取属性的接口
ConfigurableReactiveWebApplicationContext接口:用于设置属性值的接口
接下来看下AbstractApplicationContext抽象类的子类
一. AbstractRefreshableApplicationContext抽象类的子类
1.AbstractRefreshableConfigApplicationContext抽象类的子类
①AnnotationConfigReactiveWebApplicationContext:实现了ConfigurableReactiveWebApplicationContext
②AbstractXmlApplicationContext抽象类:
Ⅰ.FileSystemXmlApplicationContext
Ⅱ.ClassPathXmlApplicationContext
③AbstractRefreshableWebApplicationContext抽象类:实现了ConfigurableWebApplicationContext接口
Ⅰ.XmlWebApplicationContext
Ⅱ.GroovyWebApplicationContext
Ⅲ.AnnotationConfigWebApplicationContext
以上ApplicationContext只有AnnotationConfigWebApplicationContext以及AnnotationConfigReactiveWebApplicationContext实现了AnnotationConfigRegistry接口
二. GenericApplicationContext的子类
1.GenericXmlApplicationContext
2.StaticApplicationContext
①StaticWebApplicationContext:实现了ConfigurableWebApplicationContext接口
3.GenericWebApplicationContext:实现了ConfigurableWebApplicationContext接口
①ServletWebServerApplicationContext:实现了ConfigurableWebServerApplicationContext接口
Ⅰ.AnnotationConfigServletWebServerApplicationContext
Ⅱ.XmlServletWebServerApplicationContext
4.GenericGroovyApplicationContext
5.AnnotationConfigApplicationContext
6.GenericReactiveWebApplicationContext:实现了ConfigurableReactiveWebApplicationContext
①ReactiveWebServerApplicationContext:实现了ConfigurableWebServerApplicationContext
Ⅰ. AnnotationConfigReactiveWebServerApplicationContext
以上ApplicationContext都因GenericApplicationContext实现了BeanDefinitionRegistry
Spring和SpringBoot一共提供了十余种ApplicationContext,但是实际上在平时的开发中只会用到其中的几种。只需重点掌握常用的几种ApplicationContext即可。