【实战】SpringBoot自定义 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

pom 复制代码
<!--项目依赖不传递
例如: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>
pom 复制代码
<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自动装配文件,并在文件中指定装配类

java 复制代码
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
  com.example.demostarter.DemoStarterApplication

6、新增测试接口和测试类

java 复制代码
/**
 * 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;
    }
    
}
java 复制代码
/**
 * 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

pom 复制代码
<!--demo-starter-->
<dependency>
   <groupId>com.example</groupId>
   <artifactId>demo-starter</artifactId>
   <version>0.0.1-SNAPSHOT</version>
</dependency>

2、编写测试类,并在启动类配置扫描包位置

java 复制代码
/**
 * 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();
   }

}
java 复制代码
@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文件。

相关推荐
Larcher5 小时前
React Router 不只是页面跳转:从 SPA 路由到权限守卫的完整实践
javascript·后端
Larcher5 小时前
大模型为什么每次回答都不一样?一文搞懂 Temperature、Top K 与 Top P
javascript·后端
LucianaiB7 小时前
毕业老学长给我留的最后一句话是:“AI 写的,别挂我名。” 我直接 神(Seed Evolving) 来!助我!
后端
IvanCodes7 小时前
RAG 实战教程(一):RAG 工作原理与完整流程——分片、索引、召回、重排和生成
人工智能·后端·agent
·薯条大王8 小时前
经济实惠玩云服务器|一台云服务器多人共用,子账号配置教程
java·linux·运维·服务器·汇编·c++·python
CodeSheep8 小时前
稚晖君公司人事大变动,来了!
前端·后端·程序员
小满zs8 小时前
Go语言第八章(函数)
后端·go
stark张宇10 小时前
实战Go高级特性:Context超时控制、defer资源回收与Channel通信的关键避坑点
后端·go
ZJH__GO11 小时前
网络编程v4pro--实现聊天室文件传输功能
java·服务器·网络·计算机网络
程序员黑豆11 小时前
Windows 系统 Java 环境变量配置全攻略:解决“不是内部或外部命令”
java·前端·ai编程