SpringBoot核心运行原理
Spring Boot 最核心的功能就是自动配置,它的功能的实现都是基于“约定优于配置”的原则。那么 Spring Boot 是如何约定,又是如何实现自动配置功能的呢?
下面我们通过源码学习 Spring Boot 的核心运作原理,内容涉及自动配置的运作原理、核心功能模块、核心注解以及使用到的核心源代码分析。
核心运行原理
使用 Spring Boot 时,我们只需引|入对应的 Starters, Spring Boot 启动时便会自动加载相关依赖,配置相应的初始化参数,以最快捷、简单的形式对第三方软件进行集成,这便是 SpringBoot 的自动配置功能。我们先从整体上看一下 Spring Boot 实现该运作机制涉及的核心部分,如图 所示:
上图说明: Spring Boot 通过@EnableAutoConfiguration 注解开启自动配置,加载 spring.factories 中注册的各种 AutoConfiguration 类,当某个 AutoConfiguration类满足其注解@Conditional 指定的生效条件(Starters 提供的依赖、配置或 Spring 容器中是否存在某个 Bean 等)时,实例化该 AutoConfiguration 类中定义的 Bean(组件等),并注入 Spring 容器,就可以完成依赖框架的自动配置。
上图中各部分参与运行的组件的说明如下:
- @EnableAutoConfiguration:该注解由组合注解@SpringBootApplication 引入,完成自动配置开启,扫描各个jar包下的spring.factories文件,并加载文件中注册的AutoConfiguration类等。
- spring.factories:配置文件,位于 jar 包的 META-INF 目录下,按照指定格式注册了自动配置的 AutoConfiguration 类。spring.factories 也可以包含其他类型待注册的类。该配置文件不仅存在于 Spring Boot 项目中,也可以存在于自定义的自动配置(或 Starter)项目中。
- AutoConfiguration 类:自动配置类,代表了 Spring Boot 中一类以 XXAutoConfiguration命名的自动配置类。其中定义了三方组件集成 Spring 所需初始化的 Bean 和条件。
- @Conditional:条件注解及其衍生注解,在 AutoConfiguration 类上使用,当满足该条件注解时才会实例化 AutoConfiguration 类。
- Starters:三方组件的依赖及配置,Spring Boot 已经预置的组件。Spring Boot 默认的Starters 项目往往只包含了一个 pom 依赖的项目。如果是自定义的 starter,该项目还需包含 spring.factories 文件、AutoConfiguration 类和其他配置类。