转载

【图解Springboot】IOC那些事儿(一)ApplicationContext的变化

关于源码解析的文章,我感觉阅读学习的效率并不高。没有脑图来的实在,自顶向下自行学习,能大大增加学习效率。【图解Springboot】系列文章只放干货,不说废话。图片仅供收藏,转载请标明出处,谢谢各位小伙伴!

【图解Springboot】IOC那些事儿(一)ApplicationContext的变化

学习IOC之前,我们需要先搞明白什么是Spring容器。

Spring容器一代目

1.什么是Spring容器?

Spring容器是Spring的核心,一切SpringBean都存储在Spring容器内部,实现依赖注入,并由其管理Bean的生命周期。

注意:Spring容器并不仅仅是一个容器,而是有很多个容器,Spring容器仅仅是多个容器在概念上的统称。 又或者说Spring容器存在多种实现

2.Spring容器的分类

Spring自带多个容器的实现,这些容器大致可以分为2种类型:

BeanFactory(Bean工厂)
ApplicationContext(应用上下文)

通常BeanFactory是底层的实现,功能和方法很少,大部分场景仅仅是用于Spring框架的底层支持。 对于业务开发者来说,BeanFactory能够提供的服务实在是少之又少,所以基本开发中,我们都是使用ApplicationContext来实现业务需求

3.核心接口

spring时代的Spring容器只有三个非常重要的接口:

BeanFactory
ApplicationContext
WebApplicationContext

SpringBoot时代的变化

当进入SpringBoot时代,因为得益于SpringBoot自带 嵌入式的Servlet容器 ,所以底层的设计也发生了一些变化。因为SpringBoot 2.x 出现了开发模式的分类,核心接口也出现了变化。

因为SpringBoot使用的是嵌入式Servle容器, Servlet容器不再是外部应用,而是作为SpringBoot项目中的一个子组件的存在 。所以在SpringBoot项目启动过程中,SpringBoot容器的启动和初始化是 优先 于Servlet容器的,Servlet容器的初始化是由Spring容器来操控的,这一点明显与Spring时代不一样。

核心接口:

Spring SpringBoot1.x SpringBoot2.x
BeanFactory BeanFactory BeanFactory
ApplicationContext ApplicationContext ApplicationContext
WebApplicationContext WebApplicationContext WebApplicationContext
WebServerApplicationContext

实现类:

xml开发 Spring SpringBoot1.x SpringBoot2.x
Web应用 XmlWebApplicationContext XmlEmbeddedWebApplicationContext XmlServletWebServerApplicationContext
非Web应用 ClassPathXmlApplicationContext
FileSystemXmlApplicationContext
不变 不变
注解开发 Spring SpringBoot1.x SpringBoot2.x
Web应用 AnnotationConfigWebApplicationContext AnnotationConfigEmbeddedWebApplicationContext AnnotationConfigServletWebServerApplicationContext
非Web应用 AnnotationConfigApplicationContext 不变 不变
WebFlux AnnotationConfigReactiveWebServerApplicationContext

结论:所以对于SpringBoot的另起炉灶,我们只用关注ApplicationContext接口的子接口WebServerApplicationContext就可以了。

总结

Spring:

传统Spring中自带了多种类型的应用上下文 ,如下是常见的:

AnnotationConfigApplicationContext
AnnotationConfigWebApplicationContext
ClassPathXmlApplicationContext
FileSystemXmlApplicationContext
XmlWebApplicationContext

SpringBoot 1.X :

  • AnnotationConfigEmbeddedWebApplicationContext 替代 AnnotationConfigWebApplicationContext 作为 WebApplicationContext 的默认实现类,因为以前的 WebApplicationContext 的初始化是由Servelt容器完成的,而SpringBoot中Spring容器初始化优先于Servlet容器

  • XmlEmbeddedWebApplicationContext 替代 XmlWebApplicationContext

SpringBoot 2.X :

引入了一个新接口: WebServerApplicationContext

他的两个实现类分别是:

  • ReactiveWebServerApplicationContext (WebFlux)

  • ServletWebServerApplicationContext (SpringMvc)

对应子类:

  1. xml开发使用 XmlServletWebServerApplicationContext
  2. 注解开发使用 AnnotationConfigServletWebServerApplicationContext
  3. AnnotationConfigReactiveWebServerApplicationContextReactiveWebApplicationContext 的实现类,跟传统MVC的 WebApplicationContext 是同级不同编程模式的Spring容器
原文  https://juejin.im/post/5f059b05e51d45348e27a0de
正文到此结束
Loading...