springboot自定义starter(避坑教学)

在实际开发中,经常会定义一些公共组件,提供给各个项目团队使用。而在springboot的项目中,一般会将这些公共组件封装为springboot的starter。

1.命名规范

Spring官方Starter通常命名为 spring-boot-starter-{name}

如:spring-boot-starter-web

Spring官方建议非官方Starter命名应遵循 {name}-spring-boot-starter的格式:

如 mybatis-spring-boot-starter。

2.首先创建一个SpringBoot基础工程

注意生成启动类pom坐标可以如图位置修改

pom文件如下

java 复制代码
  <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <optional>true</optional>
            </dependency>


    </dependencies>

3.创建自动配置类

工程下创建config包,创建UserAutoConfiguratio类

UserAutoConfiguratio代码:

java 复制代码
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
@ConditionalOnClass(UserService.class)
@EnableConfigurationProperties(UserProperties.class)
public class UserAutoConfiguration {

    @Autowired
    UserProperties userProperties;


    @Bean
    @ConditionalOnMissingBean(UserService.class)
    public UserService userService(){
        //将userService的字段赋值并注入到ioc容器
        return new UserService(userProperties.getUserName(), userProperties.getHobby());
    }
}

这个类作用是读取application.yml的配置属性

4.创建配置类:UserProperties

继续在config包下,创建UserAutoConfiguratio类

java 复制代码
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;

/**
 * @author qinbo
 * @version 1.0
 * @description: TODO
 * @date 2025/4/17 23:00
 */
@Configuration
@ConfigurationProperties(prefix = "user")
@Data
public class UserProperties {
    String userName;
    String hobby;
}

这个类作用是接收yml文件的属性,得到映射

注意yml的写法

复制代码
user:
  username: admin
  hobby: 123456

5.业务类:UserService

继续在config包下,创建UserService类

java 复制代码
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class UserService {
    String name;
    String hobby;

    public String test(){
        System.out.println("name"+name+"\t\thobby"+hobby);
        return "this is test method";
    }
}

这个类就是处理业务

6.创建META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports文件

在resources目录下创建

成功后如下图

这个地方博主掉坑里了/(ㄒoㄒ)/~~

里面编写自动配置类的路径(例如)

复制代码
com.bo.userstatetr.config.UserAutoConfiguration

最后就是通过clear install了,把jar包打到本地仓库

现在starter已经打包完成,那么我们如何在另一个boot项目中使用他

(1)导入坐标依赖

这就是之前项目的pom文件

在另一个项目中yml进行配置属性

最后就是依赖注入进行调用

java 复制代码
import com.bo.userstatetr.config.UserService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class ExceldemoApplicationTests {
    @Autowired
    UserService userService;

    @Test
    void contextLoads() {

        userService.test();
    }

}
相关推荐
kingx321 分钟前
Bugku 3122 谷歌小恐龙题解:纯离线逆向 Vault 的 AES-GCM 加密资源(附 Python 解密器)
java·逆向·ctf·bugku·aes-gcm
DevOpenClub2 小时前
职教高考控制线 API:招生类别枚举、筛选与空分数含义
java·数据库·高考
露天赏雪4 小时前
第3篇:Sentinel熔断降级实战:大模型接口抖动时的服务兜底方案
java·开发语言·人工智能·spring boot·spring·servlet·sentinel
天天被压力4 小时前
【A股分钟级高频数据完全手册 #06】北交所分钟级数据接口:京市股票Pro版最新分时
java·人工智能·python
天天被压力4 小时前
【A股分钟级高频数据完全手册 #05】指数历史分钟数据接口:Pro版沪深指数分时回放
java·人工智能·python
captain3764 小时前
▲统一功能——DispatcherServlet源码分析
java·spring·java-ee·log4j·maven
金銀銅鐵4 小时前
JDK 21 中 List.of 的实现细节:从 List12 到 ListN
java·后端·ai编程
yeccheng6 小时前
MySQL 索引超详解:从底层 B+ 树到面试高频考点
java·开发语言·jvm·mysql·面试
这个昵称不容易6 小时前
SpringBoot 读书笔记共享平台部署实战:97 个 Java 文件 / 113 个接口 / 10 张表
java·springboot·毕设
金銀銅鐵8 小时前
一个 Java 文件实现《孫子兵法·始計篇》中英对照阅读器
java·后端·ai编程