引言
还记得,笔者在前面的博文《Spring Boot 项目介绍》中提到了,Spring Boot 最核心的功能就是自动配置,该功能的实现是基于 “约定由于配置” 的原则。
那很多读者就要问了,Spring Boot
它是如何来约定的呢?又是如何实现自动配置功能的呢?
从本篇开始,笔者将带领大家通过学习 Spring Boot
源码,来了解它核心的运行原理。后续的内容将会涉及自动配置的运作原理、核心功能模块、核心注解等等。
整体介绍
1. 核心运行原理图
在我们的项目中,接入 Spring Boot
其实是最简单的。我们只需要引入 Spring Boot
对应的 Starters
,然后它启动时就会自动加载相关依赖,并配置相应的初始化参数,从而可以很方便地对第三方软件进行集成。
我们先从整体上来看一下 Spring Boot
实现上述自动配置机制的核心运行原理图:
上图描述了 Spring Boot
自动配置功能运作过程中涉及的几个核心功能及其相互之间的关系,其中的内容将在第3小节介绍。
2. 自动配置的整体流程
从上面的 Spring Boot
自动配置功能核心运行原理图,我们可以了解它自动配置的整体流程,如下:
- 首先
Spring Boot
通过@EnableAutoConfiguration
注解开启自动配置; - 然后,加载
spring.factories
中注册的各种AutoConfiguration
类; - 接着,当某个
AutoConfiguration
类满足其注解@Conditional
指定的生效条件(Starters
提供的依赖、配置或Spring
容器中存在某个Bean
等)时,实例化该AutoConfiguration
类中定义的Bean
(组件等); - 最后,将这些组件都注入
Spring
容器中,完成依赖框架的自动配置功能。
3. 各核心功能和组件初步介绍
下面我们对上述涉及到的组件进行简单介绍:
@EnableAutoConfiguration
: 了解过的朋友,肯定疑惑,Spring Boot 的启动类明明没有引入该注解呀,其实该注解最终是由组合注解 @SpringBootApplication 引入,用来完成自动配置开启,扫描各个 jar 包下的 spring.factories 文件,并加载文件中注册的 AutoConfiguration 类等。spring.factories
: 配置文件,位于 jar 包的 META-INF 目录下,按照指定格式注册了自动配置的 AutoConfiguration 类。spring.factories 也可以包含其他类型待注册的类。该配置文件不仅存在于 Spring Boot 项目中,也可以存在于自定义的自动配置(或 Starter)项目中。AutoConfiguration 类
:自动配置类,代表了 Spring Boot 中一类以 XXXAutoCofiguration 命名的自动配置类。其中定义了三方组件集成 Spring 所需初始化的 Bean 和条件。@Conditional
:条件注解及其衍生注解,在 AutoConfiguration 类上使用,当满足该条件注解时才会实例化 AutoConfiguration 类。Starters
:三方组件的依赖以及配置,Spring Boot 已经预置的组件。Spring Boot 默认的 Starters 项目往往只包含了一个 pom 依赖的项目。如果是自定义的 starter,该项目还需要包含 spring.factories 文件、AutoConfiguration 类和其他配置类。
总结
本篇我们从概念层面介绍了 Spring Boot 自动配置的核心运行原理和整理流程,后续的博文将围绕这些核心部分,从源码层面进行详细介绍,敬请期待!!!
参考
《Spring Boot 技术内幕-架构设计与实现原理》朱智胜