SpringBoot自动配置原理及使用流程
SpringBoot自动配置原理

具体流程
1、导入场景
以starter-web为例
-
场景启动器导入了相关场景的所有依赖,如:
starter-json,starter-tomcat,spring-webmvc。 -
每个场景启动器都引入了一个
spring-boot-starter,核心场景启动器。
-
核心场景启动器引入了
spring-boot-autoconfigure依赖,它的作用是自动配置Spring应用程序。
2、编写主程序
使用@SpringBootApplication注解标注,说明它是一个SpringBoot项目。
-
@SpringBootApplication由三个注解组成:@SpringBootConfiguration,@EnableAutoConfiguration和@ComponentScan -
SpringBoot默认只能扫描自己主程序所在包及其子包,扫描不到
spring-boot-autoconfigure包中官方写好的配置类。(在External Libraries)
-
@EnableAutoConfiguration:SpringBoot开启自动配置的核心。注解内容主要包括:
-
@Import(AutoConfigurationImportSelector.class)提供自动功能:批量给容器注入组件。 -
SpringBoot启动会默认加载146个配置类,这146个配置类来自于
spring-boot-autoconfigure下的META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
-
项目启动的时候利用@Import批量导入组件机制把
autoconfigure包下的146个xxxAutoConfiguration类导入进来(自动配置类) -
虽然导入了146个自动配置类,但不会都生效,会按需生效,里面包含@ConditionalOnClass…(条件注解),只有在满足条件的时候才会进行下一步的操作。

-
总结
SpringBoot的核心流程包括如下的几个步骤。
- 导入starter,就会导入
autoconfigure autoconfigure包有META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports文件,里面制定了所有启动要加载的自动配置类@EnableAutoConfiguration会自动的把上面文件中所有的自动配置类(xxxAutoConfiguration)导入xxxAutoConfiguration会给容器中导入一堆组件,组件都是从xxxProperties中提取属性值xxxProperties和配置文件进行绑定的

SpringBoot的使用流程
1、选场景
官方starter:https://docs.spring.io/spring-boot/docs/current/reference/html/using.html#using.build-systems.starters
第三方:https://mvnrepository.com/

2、写配置
改配置文件关键项,如数据库参数。(如下:redis的自动配置类,可以双击shift搜索这个配置类。)



3、分析这个场景
分析这个场景给我们导入了哪些能用的组件,自动装配这些组件进行后续使用,不满意自动配置好的默认组件,则可以进行定制化处理,步骤如下:
1、更改配置(可以在application.properties中进行配置)
2、自定义组件

4、业务代码开发
通过注解以及java语法完成功能组件的开发。



















