springboot3自定义starter(详细入门)
spring boot版本3.0.12、jdk17。1、创建一个spring boot工程,并导入如下的依赖:--自动装配依赖-->--自动装配依赖非必需依赖,该依赖作用是在使用IDEA编写配置文件有代码提示-->2、把pom文件中的标签中的的spring boot maven打包插件删除掉,我们不需要将这个starter打成能自动启动的jar文件,甚至你的启动类也可以删除掉。
前言:我一直想自定义一个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框架的源码。
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐

所有评论(0)