springboot3自定义starter(详细入门)

前言:我一直想自定义一个starter,上传到maven仓库中,以供我之后项目的使用。在网上看到了几个教程,但是好像一直不太对。我询问了大神之后,才发现是spring boot的版本问题。

我们在自定义starter时,要将我们的自动配置类放到META-INF目录下。但是由于spring boot的版本变化问题。自动配置类要存放的文件有了点变化。

1、在spring boot2.7版本之前:

通过META-INF/spring.factories文件定义我们自动配置的类。

2、在spring boot2.7~spring boot3.0版本之间,是兼容了

META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports  和

META-INF/spring.factories  这两个文件的。

3、在spring boot3.0版本之后,只支持使用

META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports

来自定义我们的自动配置的类。

自定义starter:

spring boot版本3.0.12、jdk17。

1、创建一个spring boot工程,并导入如下的依赖:

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>
    <!--            自动装配依赖-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-autoconfigure</artifactId>
    </dependency>

    <!--自动装配依赖非必需依赖,该依赖作用是在使用IDEA编写配置文件有代码提示-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-configuration-processor</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
    </dependency>
        <dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
        </dependency>
</dependencies>

2、把pom文件中的<build>标签中的<plugin>的spring boot maven打包插件删除掉,我们不需要将这个starter打成能自动启动的jar文件,甚至你的启动类也可以删除掉。(spring boot maven打包插件一定要删除掉,不然打出来的jar包不能正常使用。)

3、在这个自定义的starter中写几个bean,并输出一些信息,表明它们能够在其他spring boot项目中正常使用。

(1)、定义一个属性类,用来读取配置文件中的属性:(如果想要设置默认值得话,可以直接在定义属性的时候设置一个初始值,这样你不在yml配置文件中明确指定值的话,默认就有初始值,在yml文件中指定值会覆盖掉我们写的默认值。)

@Component
@ConfigurationProperties(prefix = "student")
@Data
public class StudentProperties {
    /**
     * 姓名
     */
private String name;
    //private String name="张乔";

    /**
     * 年龄
     */
    private Integer age;
    /**
     * 性别
     */
    private String sex;
}

(2)、定义一个service类,用来输出一下配置类:

public class StudentService {
    @Autowired
    private StudentProperties studentProperties;
    public void print() {
        System.out.println("姓名:"+studentProperties.getName());
        System.out.println("年龄:"+studentProperties.getAge());
        System.out.println("性别:"+studentProperties.getSex());
    }
}

(3)、定义一个配置类,将我们要用到的这两个类进行@Import注入:

@AutoConfiguration
@Import({StudentService.class, StudentProperties.class})
public class AutoConfig {
}

(4)、在资源目录下,创建

META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports 

注意名字一定不能写错,前两个是目录,最后一个是文件。如果写对了,idea会有提示的:

org.springframework.boot.autoconfigure.AutoConfiguration.imports 文件中,指定你的配置类的路径。如:

配置yml提示:

 将spring-configuration-metadata.json文件复制一份到META-INF/spring目录下,这样就可以在yml配置文件中使用时在后面给出提示。

(5)、运行maven命令,可以将这个自定义的starter上传到maven仓库中。

1、运行

mvn clean install -DskipTests

2、直接使用idea上提供的生命周期:

(6)、现在就将这个starter上传到了本地的maven仓库中,接下来可以只要导入自定义starter的依赖,在任意的项目中使用。

我随意的打开一个项目,并导入starter的依赖:

在配置文件中输入我们在自定义starter中定义的前缀:

由于你引入了spring-boot-configuration-processor,因此在配置文件中输入时会有提示,这也进一步说明我们的starter气作用了。

在测试文件中进行测试:

输出结果如下:

能得到输出结果,证明我们的自定义的starter是成功的。

总结:

spring boot自定义starter在我们日常的工作和学习中,作用是非常巨大的。可以将一些共性的功能抽离出来供我们进行使用,我这次只是介绍了最基础的一个自定义starter的demo,如果你想要进行更复杂的功能,尽管去做了,大名鼎鼎的hutool工具包不就是一个整合了非常多功能的jar包。

自定义starter的原理是基于spring boot的自动配置,简单来说就是@EnableAutoConfiguration

注解会去扫描

META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports

(这个路径可不是我胡说的,在springboot的注解中详细声明了会自动扫描的文件名称和路径,那么基于springboot框架封装的一些组件。要想将bean注入到IOC容器中,也要遵循springboot的约定。这就是springboot框架的核心思想。约定大于配置大于编码

中的配置类,并将符合条件的bean注册到IOC容器中。更详细的原理咱也说不上来。有兴趣的可以去看看spring boot自动装配的流程,深入了解一下springboot框架的源码。

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Spring Boot是一个快速开发微服务的框架,它提供了大量的自动化配置和快速开发的工具。在Spring Boot中,我们可以使用Starter来快速集成一些常用的功能,如数据库、缓存、web等。而自定义Starter则可以让我们将自己的功能快速集成到Spring Boot中,下面是自定义Starter的流程: 1. 创建Maven项目 首先,我们需要创建一个Maven项目作为我们自定义Starter的项目。在项目的pom.xml中添加Spring Boot的依赖,以及其他需要集成的依赖。 2. 编写自动配置类 自动配置类是自定义Starter的核心,它负责将我们自定义的功能集成到Spring Boot中。在自动配置类中,我们可以使用@Conditional注解来判断是否需要进行配置。 3. 编写Starter类 Starter类是我们自定义Starter的入口,它负责将自动配置类注入到Spring容器中。在Starter类中,我们需要使用@EnableAutoConfiguration注解来启用自动配置。 4. 打包和发布Starter 当我们完成了自动配置类和Starter类的编写后,我们需要将自定义Starter打包成jar包,并发布到Maven仓库中,以便其他项目可以通过Maven依赖的方式使用我们的Starter。 5. 在项目中使用自定义Starter 在其他项目中使用自定义Starter非常简单,只需要在项目中的pom.xml中添加我们自定义Starter的依赖即可。Spring Boot会自动将我们的自定义Starter集成到项目中,并进行自动配置。 以上就是自定义Starter的流程,通过自定义Starter,我们可以将自己的功能快速集成到Spring Boot中,提高开发效率。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张乔24

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值