1. SpringBoot自动装配
什么是自动装配?
SpringBoot 在启动时会扫描外部依赖jar 包中的某些文件,将文件中配置的类型信息加载到 Spring 容器。
简单来说,自动装配能够加载三方jar包中的类,注册到Spring容器。
自动装配版本
自SpringBoot 2.7版本开始,对于如何告知SpringBoot要自动装配哪些类发生了变化。
在这之前的SpringBoot版本,需要写一个spring.factories
,放到recourses
下的META-INF
目录。
而从2.7版本开始,需要写一个org.springframework.boot.autoconfigure.AutoConfiguration.imports
文件,放在放到recourses/META-INF/spring
目录下,如图所示:
3.0之后会弃用老写法,本次课程也会使用新的写法!
2. 如何封装自己的spring-boot-starter
首先,我们要清楚:封装starter意味着你需要自动装配某些类,否则它就是一个普通的maven项目,不需要做成starter。
2.1 两种封装方式
- 创建两个模块,starter模块和autoconfigure模块。starter模块会引用autoconfigure模块,也可以管理一些依赖,它并不需要编码。(包一层思想)
- 创建一个模块,starter模块和autoconfigure模块融合写在一起。
第一种方式的好处是:解耦,如果你的自动装配项目有好几个,有一些可选的特性(也只是针对这种类似情况)。
通过starter将autoconfigure包装,我们就可以在starter中对依赖进行管理:排除或者依赖传递。将starter模块暴露给用户,引入即可用,用户会很方便。
两种方式并没有好坏之分!!!!!
2.2 编码
在开始之前,我们需要创建两个Maven项目,一个叫:xxx-spring-boot-starter。另一个叫:xxx-spring-boot-starter-autoconfigure
xxx-spring-boot-starter-autoconfigure
依赖:
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<autoconfigure.version>2.7.6</autoconfigure.version>
<autoconfigure.processor.version>2.7.6</autoconfigure.processor.version>
</properties>
<!-- 自动配置 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure</artifactId>
<version>${autoconfigure.version}</version>
<optional>true</optional>
</dependency>
<!-- 配置处理,增加配置提示 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure-processor</artifactId>
<version>${autoconfigure.processor.version}</version>
<optional>true</optional>
</dependency>
配置提示:
在recourses/META-INF
目录下,创建一个叫spring-configuration-metadata.json
的文件,内容如下:
{
"properties": [
{
"name": "test.name",
"type": "java.lang.String",
"description": "姓名"
},
{
"name": "test.hobby",
"type": "java.lang.String",
"description": "爱好"
}
]
}
如果你的starter是有mapper层的话,注意配置时加个*