自定义一个 Spring Boot Starter -笔记

SpringBoot Starter的介绍参考: Spring Boot Starter简介-笔记-CSDN博客。这里介绍如何自定义一个springBoot Starter。

1. 项目结构

创建一个 Maven 项目,结构如下:

java 复制代码
custom-spring-boot-starter-demo/
├── custom-hello-jdk/  # jdk模块,包含功能逻辑
├── custom-hello-spring-boot-starter-jdk/  #Starter模块

2. 项目代码

2.1 custom-hello-jdk模块

step1. pom.xml

XML 复制代码
<project>
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.example</groupId>
    <artifactId>custom-hello-jdk</artifactId>
    <version>1.0.0</version>

    <dependencies>
        <!-- Spring Boot 自动配置依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-autoconfigure</artifactId>
        </dependency>
    </dependencies>
</project>

step2. 定义功能接口和实现类

java 复制代码
package com.example.demo;

public interface HelloService {
    String sayHello();
}

//----------------------------------------------------

package com.example.demo;

import org.springframework.stereotype.Service;

@Service
public class DefaultHelloService implements HelloService {
    private final String message;

    public DefaultHelloService(String message) {
        this.message = message;
    }

    @Override
    public String sayHello() {
        return message;
    }
}

step3. 配置属性类

java 复制代码
package com.example.demo;

import org.springframework.boot.context.properties.ConfigurationProperties;

@Data
@ConfigurationProperties(prefix = "custom.hello")
public class HelloProperties {
    private String message = "Hello from Custom Starter!";
}

step4. 自动配置类

java 复制代码
package com.example.demo;

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
@EnableConfigurationProperties(HelloProperties.class)
public class HelloAutoConfiguration {

    private final HelloProperties helloProperties;

    public HelloAutoConfiguration(HelloProperties helloProperties) {
        this.helloProperties = helloProperties;
    }

    @Bean
    @ConditionalOnMissingBean(HelloService.class)
    public HelloService helloService() {
        return new DefaultHelloService(helloProperties.getMessage());
    }
}

2.2 custom-hello-spring-boot-starter-jdk模块

step1.pom.xml添加对custom-hello-jdk的依赖

XML 复制代码
<project>
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.example</groupId>
    <artifactId>custom-hello-spring-boot-starter-jdk</artifactId>
    <version>1.0.0</version>
    <packaging>pom</packaging>

    <dependencies>
        <!-- 引入自动配置模块 -->
        <dependency>
            <groupId>com.example</groupId>
            <artifactId>custom-hello-jdk</artifactId>
            <version>1.0.0</version>
        </dependency>
    </dependencies>
</project>

step2.注册自动配置

src/main/resources/META-INF/spring.factories 中添加:

XML 复制代码
org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.example.demo.HelloAutoConfiguration

**备注:**自动配置注册也可以放到custom-hello-jdk模块里,在starter里仅放pom文件,作为依赖聚合,方便用户引入。

step3.构建和发布

  1. 执行 mvn clean install 将 Starter 安装到本地 Maven 仓库
  2. 或通过 mvn deploy 发布到远程仓库

2.3 使用自定义 Starter

背景:在另外一个项目中使用自定义的Starter。

step1. 在另一个 Spring Boot 项目中引入依赖

XML 复制代码
<dependency>
    <groupId>com.example</groupId>
    <artifactId>custom-hello-spring-boot-starter-jdk</artifactId>
    <version>1.0.0</version>
</dependency>

step2. 配置属性(可选)

XML 复制代码
custom.hello.message=Hello from Config!

step3.使用Bean

java 复制代码
import com.example.demo.HelloService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {

    @Autowired
    private HelloService helloService;

    @GetMapping("/hello")
    public String hello() {
        return helloService.sayHello();
    }
}

2.4 总结

上述自定义springBoot Starter的完整流程说明:

  1. jdk功能模块:包含实际功能代码、配置属性等
  2. Starter 模块:作为依赖聚合,方便用户引入
  3. 条件化配置 :通过 @ConditionalOnMissingBean 避免重复 Bean
  4. 属性绑定 :使用 @ConfigurationProperties 实现灵活配置
相关推荐
振鹏Dong25 分钟前
Java基础问题——八股盛宴 | 3w字分享
java
JH307327 分钟前
【SpringBoot】SpringBoot中使用AOP实现日志记录功能
java·spring boot·后端
学java的cc32 分钟前
Spring AI快速入门
java·大数据·spring
吃货界的硬件攻城狮1 小时前
【STM32 学习笔记】EXTI外部中断
笔记·stm32·学习
豆沙沙包?1 小时前
2025年- H17-Lc125-73.矩阵置零(矩阵)---java版
java·线性代数·矩阵
吃货界的硬件攻城狮1 小时前
【STM32 学习笔记 】OLED显示屏及Keil调试
笔记·stm32·学习
程序员小刚1 小时前
基于SpringBoot + Vue 的作业管理系统
vue.js·spring boot·后端
njsgcs1 小时前
chili3d调试笔记12 deepwiki viewport svg雪碧图 camera three.ts
笔记
钦拆大仁2 小时前
华为云短信接入实现示例
java·华为云
FBI HackerHarry浩2 小时前
Linux云计算训练营笔记day02(Linux、计算机网络、进制)
linux·运维·网络·笔记·计算机网络·进制