时至今日,SpringBoot 系列文章也算是告一段落,回想起当初立flag的情景,仿佛还历历在目。用一个月时间学完 SpringBoot 并整理成文章?又定一些异想天开计划,当时这样想着。不过,虽然过程比较艰辛,但结局也还算完美,在最后一篇文章完成那一刻,心情却很平静,我想,大概是习以为常了吧。
在系列结尾,再对 SpringBoot 做一个总结,也算是尘埃落定了。
SpringBoot 最显著的功能就是快速启动一个 Spring 应用,为 Spring 所有特性提供了更广泛的支持;提供一系列大型项目通用的非功能性功能(例如嵌入式服务器,安全性,指标,运行状况检查和外部化配置);完全没有代码生成,也不需要XML配置也是一大亮点。
该系列文章虽然以讨论 SpringBoot 为中心,但也涉及到了 Spring 技术栈,因为 SpringBoot 底层核心是就是 Spring ,如果对 Spring 了如指掌,那学习 SpringBoot 就轻而易举了。
详见 《SpringBoot(一)自动装配基础》
SpringBoot 中运用了大量的 Spring 注解,其注解大致分为这几类:
配置注解都在 Spring 的 ConfigurationClassParser#doProcessConfigurationClass 方法中进行处理,后续会在 Spring 系列文章中详细介绍;模式注解都标注了 @Component 注解,属于 @Component 的派生注解,@ComponentScan 会扫描标注 @Component
及其派生注解的类,并将这些类加入到 Spring 容器中; @Enable
模块注解中通过 @Import
导入配置类,在这些配置类中加载 @Enable
模块需要的组件。
详见 《SpringBoot(二)自动装配正文》
在 SpringBoot
时代,通过一个main方法就可以启动一个应用,其底层依赖的就是 Spring
几个注解。从 @SpringBootApplication
注解中的 @EnableAutoConfiguration
注解开始, @EnableAutoConfiguration
属于 Spring
的 @Enable
模块注解,在该注解中通过 @Import
导入 AutoConfigurationImportSelector
类,在该类中加载所有以 AutoConfiguration
为后缀且标注 @Configuration
注解的自动配置类,每个自动配置类可以装配一个外部模块,如 Web MVC 模块对应的配置类是 WebMvcAutoConfiguration
。在自动配置类中又有众多 @Conditional
条件注解,可达到灵活装配的目的。
详见 《SpringBoot(三)SpringApplication启动类准备阶段》
在构造 SpringApplication
启动类时,初始化了几个重要的类,如 WebApplicationType
、 ApplicationContextInitializer
、 ApplicationListener
。其中 WebApplicationType
存储的是当前应用类型,如 Servlet Web 、Reactive Web; ApplicationContextInitializer
和 ApplicationListener
则是 SpringBoot
通过扩展 Spring 特性创建的初始化器及监听器。
详见 《SpringBoot(四)SpringApplication启动类运行阶段》
在 SpringApplication
运行阶段中,先是通过扩展 Spring
监听机制,在 SpringBoot
各个阶段发布不同事件,执行多个事件监听器;然后创建 Environment
类,这是外部化配置的核心类;最后启动 Spring
容器,通过 WebApplicationType
判定当前应用类型,创建应用对应 ApplicationContext
应用上下文,再调用 ApplicationContext#refresh
方法启动容器。
详见 《SpringBoot(五)外部化配置之Environment》
这篇文章介绍了外部化配置的几种资源类型,如 properties、YAML、环境变量、系统属性、启动参数等。还详细介绍了 Environment
类,该类是外部化配置核心类,所有外部化配置数据,都保存在该类中,并和大家讨论了整个存储流程。
详见 《SpringBoot(六)外部化配置之@ConfigurationProperties》
@ConfigurationProperties
是 SpringBoot
实现外部化配置的重要注解,配合 SprinBoot
自动装配特性来达到快速开发的目的。主要将 properties 配置文件和 Properties 配置类中的属性进行映射,同样也和大家讨论了整个映射流程。
详见 《SpringBoot(七)嵌入式Web容器》
这篇文章详细讨论了容器的创建及启动。传统 Spring
应用需手动创建和启动 Web 容器,在 SpringBoot
中,则是嵌入式的方式自动创建和启动。 SpringBoot
支持的 Web 容器类型有 Servlet Web 容器和 Reactive Web 容器,它们都有具体容器实现,Sevlet Web 对应的是 Tomcat
、 Jetty
、 Undertow
,默认实现是 Tomcat
;Reactive Web 对应的是 Netty
。
详见 《SpringBoot(八)Starter机制之自定义Starter》
这篇文章详细介绍了 SpringBoot
的 Starter
机制,并通过自定义 Starter
来深入理解整个运行机制。 Starter
也是 SpringBoot
重要特性,通过集成 Starter
依赖,来简化项目搭建以及开发过程。
总结篇就到这里结束,最后,江湖路远,我们,下个系列见。