时至今日,SpringBoot 系列文章也算是告一段落,回想起当初立flag的情景,仿佛还历历在目。用一个月时间学完 SpringBoot 并整理成文章?又定一些异想天开计划,当时这样想着。不过,虽然过程比较艰辛,但结局也还算完美,在最后一篇文章完成那一刻,心情却很平静,我想,大概是习以为常了吧。

        在系列结尾,再对 SpringBoot 做一个总结,也算是尘埃落定了。

正文

        SpringBoot 最显著的功能就是快速启动一个 Spring 应用,为 Spring 所有特性提供了更广泛的支持;提供一系列大型项目通用的非功能性功能(例如嵌入式服务器,安全性,指标,运行状况检查和外部化配置);完全没有代码生成,也不需要XML配置也是一大亮点。

该系列文章虽然以讨论 SpringBoot 为中心,但也涉及到了 Spring 技术栈,因为 SpringBoot 底层核心是就是 Spring ,如果对 Spring 了如指掌,那学习 SpringBoot 就轻而易举了。

1、自动装配基础

详见《SpringBoot(一)自动装配基础》

SpringBoot 中运用了大量的 Spring 注解,其注解大致分为这几类:

  1. 配置注解:@Configuration@ComponentScan@Import@ConditionalBean
  2. 模式注解:@Componnt@Repository@Service@Controller
  3. @Enable 模块注解:@EnableWebMvc@EnableTransactionManagement@EnableWebFlux

配置注解都在 SpringConfigurationClassParser#doProcessConfigurationClass 方法中进行处理,后续会在 Spring 系列文章中详细介绍;模式注解都标注了 @Component 注解,属于 @Component 的派生注解,@ComponentScan 会扫描标注 @Component 及其派生注解的类,并将这些类加入到 Spring 容器中;@Enable 模块注解中通过 @Import 导入配置类,在这些配置类中加载 @Enable 模块需要的组件。

2、自动装配正文

详见《SpringBoot(二)自动装配正文》

SpringBoot 时代,通过一个main方法就可以启动一个应用,其底层依赖的就是 Spring 几个注解。从 @SpringBootApplication 注解中的 @EnableAutoConfiguration 注解开始,@EnableAutoConfiguration 属于 Spring@Enable 模块注解,在该注解中通过 @Import 导入 AutoConfigurationImportSelector 类,在该类中加载所有以 AutoConfiguration 为后缀且标注 @Configuration 注解的自动配置类,每个自动配置类可以装配一个外部模块,如 Web MVC 模块对应的配置类是 WebMvcAutoConfiguration 。在自动配置类中又有众多 @Conditional 条件注解,可达到灵活装配的目的。

3、SpringApplication启动类准备阶段

详见《SpringBoot(三)SpringApplication启动类准备阶段》

在构造 SpringApplication 启动类时,初始化了几个重要的类,如 WebApplicationTypeApplicationContextInitializerApplicationListener。其中 WebApplicationType 存储的是当前应用类型,如 Servlet Web 、Reactive Web; ApplicationContextInitializerApplicationListener 则是 SpringBoot 通过扩展 Spring 特性创建的初始化器及监听器。

4、SpringApplication启动类运行阶段

详见《SpringBoot(四)SpringApplication启动类运行阶段》

SpringApplication 运行阶段中,先是通过扩展 Spring 监听机制,在 SpringBoot 各个阶段发布不同事件,执行多个事件监听器;然后创建 Environment 类,这是外部化配置的核心类;最后启动 Spring 容器,通过 WebApplicationType 判定当前应用类型,创建应用对应 ApplicationContext 应用上下文,再调用 ApplicationContext#refresh 方法启动容器。

5、外部化配置之Environment

详见《SpringBoot(五)外部化配置之Environment》

这篇文章介绍了外部化配置的几种资源类型,如 properties、YAML、环境变量、系统属性、启动参数等。还详细介绍了 Environment 类,该类是外部化配置核心类,所有外部化配置数据,都保存在该类中,并和大家讨论了整个存储流程。

6、外部化配置之@ConfigurationProperties

详见《SpringBoot(六)外部化配置之@ConfigurationProperties》

@ConfigurationPropertiesSpringBoot 实现外部化配置的重要注解,配合 SprinBoot 自动装配特性来达到快速开发的目的。主要将 properties 配置文件和 Properties 配置类中的属性进行映射,同样也和大家讨论了整个映射流程。

7、嵌入式Web容器

详见《SpringBoot(七)嵌入式Web容器》

这篇文章详细讨论了容器的创建及启动。传统 Spring 应用需手动创建和启动 Web 容器,在 SpringBoot 中,则是嵌入式的方式自动创建和启动。SpringBoot 支持的 Web 容器类型有 Servlet Web 容器和 Reactive Web 容器,它们都有具体容器实现,Sevlet Web 对应的是 TomcatJettyUndertow,默认实现是 Tomcat;Reactive Web 对应的是 Netty

8、Starter机制之自定义Starter

详见《SpringBoot(八)Starter机制之自定义Starter》

这篇文章详细介绍了 SpringBootStarter 机制,并通过自定义 Starter 来深入理解整个运行机制。Starter 也是 SpringBoot 重要特性,通过集成 Starter 依赖,来简化项目搭建以及开发过程。

结语

总结篇就到这里结束,最后,江湖路远,我们,下个系列见。

版权声明:本文为loongk原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/loongk/p/12164334.html