自定义一个 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 实现灵活配置
相关推荐
天天摸鱼的java工程师1 分钟前
JDK 25 到底更新了什么?这篇全景式解读带你全面掌握
java·后端
毕设源码-邱学长3 分钟前
【开题答辩全过程】以 个人博客网站为例,包含答辩的问题和答案
java
5***b979 分钟前
SpringBoot(整合MyBatis + MyBatis-Plus + MyBatisX插件使用)
spring boot·tomcat·mybatis
狐579 分钟前
2025-12-04-牛客刷题笔记-25_12-4-质数统计
笔记·算法
齐生113 分钟前
iOS 知识点 - 一篇文章弄清「输入事件系统」(【事件传递机制、响应链机制】以及相关知识点)
笔记·面试
BBB努力学习程序设计13 分钟前
Java面向对象基础:类和对象初探
java
Slaughter信仰26 分钟前
图解大模型_生成式AI原理与实战学习笔记(前三章综合问答)
人工智能·笔记·学习
寻找华年的锦瑟27 分钟前
Qt-QStackedWidget
java·数据库·qt
洲星河ZXH32 分钟前
Java,比较器
java·开发语言·算法
l***370934 分钟前
spring 跨域CORS Filter
java·后端·spring