关于源码解析的文章,我感觉阅读学习的效率并不高。没有脑图来的实在,自顶向下自行学习,能大大增加学习效率。【图解Springboot】系列文章只放干货,不说废话。图片仅供收藏,转载请标明出处,谢谢各位小伙伴!
学习IOC之前,我们需要先搞明白什么是Spring容器。
Spring容器是Spring的核心,一切SpringBean都存储在Spring容器内部,实现依赖注入,并由其管理Bean的生命周期。
注意:Spring容器并不仅仅是一个容器,而是有很多个容器,Spring容器仅仅是多个容器在概念上的统称。 又或者说Spring容器存在多种实现
Spring自带多个容器的实现,这些容器大致可以分为2种类型:
BeanFactory(Bean工厂) ApplicationContext(应用上下文)
通常BeanFactory是底层的实现,功能和方法很少,大部分场景仅仅是用于Spring框架的底层支持。 对于业务开发者来说,BeanFactory能够提供的服务实在是少之又少,所以基本开发中,我们都是使用ApplicationContext来实现业务需求 。
spring时代的Spring容器只有三个非常重要的接口:
BeanFactory ApplicationContext WebApplicationContext
当进入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 |
传统Spring中自带了多种类型的应用上下文 ,如下是常见的:
AnnotationConfigApplicationContext AnnotationConfigWebApplicationContext ClassPathXmlApplicationContext FileSystemXmlApplicationContext XmlWebApplicationContext
AnnotationConfigEmbeddedWebApplicationContext
替代 AnnotationConfigWebApplicationContext
作为 WebApplicationContext
的默认实现类,因为以前的 WebApplicationContext
的初始化是由Servelt容器完成的,而SpringBoot中Spring容器初始化优先于Servlet容器
XmlEmbeddedWebApplicationContext
替代 XmlWebApplicationContext
引入了一个新接口: WebServerApplicationContext
他的两个实现类分别是:
ReactiveWebServerApplicationContext
(WebFlux)
ServletWebServerApplicationContext
(SpringMvc)
对应子类:
XmlServletWebServerApplicationContext
AnnotationConfigServletWebServerApplicationContext
AnnotationConfigReactiveWebServerApplicationContext
是 ReactiveWebApplicationContext
的实现类,跟传统MVC的 WebApplicationContext
是同级不同编程模式的Spring容器