自定义SpringBoot Starter(2.7版)

发布于:2025-06-27 ⋅ 阅读:(18) ⋅ 点赞:(0)

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 两种封装方式

  1. 创建两个模块,starter模块和autoconfigure模块。starter模块会引用autoconfigure模块,也可以管理一些依赖,它并不需要编码。(包一层思想)
  2. 创建一个模块,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层的话,注意配置时加个*


网站公告

今日签到

点亮在社区的每一天
去签到