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语法完成功能组件的开发。