文章目录
- 前言
- 技术积累
- SpringBoot starter简介
- starter的开发步骤
- 实战演示
- 自定义starter的使用
- 写在最后
前言
各位大佬在使用springboot或者springcloud的时候都会根据需求引入各种starter,比如gateway、feign、web、test等等的插件。当然,在实际的业务场景中也会有将第三方组件整合为starter供其他项目接入。那么,我们今天就分享一波SpringBoot自定义 Starter及使用。
技术积累
SpringBoot starter简介
starter是Spring Boot中的一个非常重要的概念,Starter相当于模块,它能将模块所需的依赖整合起来并对模块内的Bean根据环境( 条件)进行自动配置。使用者只需要依赖相应功能的Starter,无需做过多的配置和依赖,Spring Boot就能自动扫描并加载相应的模块。
starter的开发步骤
新建Maven项目,在项目的POM文件中定义使用的依赖;
新建配置类,写好配置项和默认的配置值,指明配置项前缀;
新建自动装配类,使用@Configuration和@Bean来进行自动装配;
新建spring.factories文件,指定Starter的自动装配类;
实战演示
自定义一个简单的starter
本次我们就简单整合一个工具类、一个api接口demo供大家了解创建流程,对于其他的配置项或者涉及数据等等也都在这个基础的starter进行叠加而已。
1、新建Maven项目
选中两个插web和lombok,点击finish完成项目创建
2、pom中增加项目依赖不传递配置,以及配置maven打包生成可执行依赖jar
<!--项目依赖不传递
例如:project1依赖a.jar(optional=true),project2依赖project1,则project2不依赖a.jar-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<!--配置可执行jar的名称,不对原jar重命名为.original-->
<classifier>exec</classifier>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
3、删除不必要的文件,最后剩下的项目格式为
4、启动类取消自动配置注释并清空方法
5、.新建spring.factories文件,指定starter的自动装配类
在resource下新建META-INF目录,然后新增spring.factories自动装配文件,并在文件中指定装配类
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.example.demostarter.DemoStarterApplication
6、新增测试接口和测试类
/**
* TestController
* @author Administrator
* @version 1.0
* @date 2024/1/20 0020 15:50
*/
@RestController
public class TestController {
/**
* TestStarterApi
* @param str
* @author Administrator
* @date 2024/1/20 0020 15:51
* @return java.lang.String
*/
@GetMapping("/testStartApi")
public String TestStarterApi(String str){
return "this is a TestStarterApi data is "+str;
}
}
/**
* TestStartUtils
* @author Administrator
* @version 1.0
* @date 2024/1/20 0020 15:52
*/
public class TestStartUtils {
/**
* test
* @author Administrator
* @date 2024/1/20 0020 15:53
* @return void
*/
public static void test(){
System.err.println("this is a TestStartUtils test method");
}
}
7、将demo-starter安装到本地仓库进行测试,当然也可以部署到远程仓库
也可以用命令: mvn install
至此,整个Starter开发完毕,已经install本地仓库,deploy远程仓库同理(mvn deploy)
自定义starter的使用
1、在需要使用starter的maven项目pom中引入demo-starter
<!--demo-starter-->
<dependency>
<groupId>com.example</groupId>
<artifactId>demo-starter</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
2、编写测试类,并在启动类配置扫描包位置
/**
* TestdemoApplicationTests
* @author Administrator
* @date 2024/1/20 0020 16:33
*/
@SpringBootTest
class TestdemoApplicationTests {
/**
* contextLoads
* @author Administrator
* @date 2024/1/20 0020 16:33
* @return void
*/
@Test
public void contextLoads() {
TestStartUtils.test();
}
}
@ComponentScan("com.example")
@SpringBootApplication
public class TestdemoApplication {
public static void main(String[] args) {
SpringApplication.run(TestdemoApplication.class, args);
}
}
3、测试引入starter,效果展示
3.1 可以直接依赖starter中的类并可以进行调用
3.2 由于启动类配置了扫描包位置可以扫到starter的api
写在最后
SpringBoot自定义 Starter及使用还是非常简单,我们在创建的时候需要注意maven插件需要增加可执行jar配置,在resource下需要指定starter的自动装配类即可,在使用starter的项目中需要按需增加扫描包以保证框架可以获取到我们的starter文件。