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