自定义一个 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 实现灵活配置
相关推荐
clorisqqq2 分钟前
《人工智能现代方法(第四版)》笔记 启程
人工智能·笔记
while(1){yan}4 分钟前
Mybatis动态SQL
数据库·spring boot·sql·spring·java-ee·mybatis
海绵宝宝的月光宝盒7 分钟前
01_SolidWorks加载Design library设计库
经验分享·笔记·其他·制造·学习方法
AwhiteV11 分钟前
打破次元:Orbital Notes,让灵感在桌面边缘“卫星式”起航!时时刻刻捕捉你的灵感!
笔记
廋到被风吹走17 分钟前
【Java】【JVM】即时编译解析:C1/C2、分层编译、OSR与日志分析
java·开发语言·jvm
计算机毕设指导619 分钟前
基于微信小程序的扶贫助农系统【源码文末联系】
java·spring boot·后端·微信小程序·小程序·tomcat·maven
Overt0p24 分钟前
抽奖系统(5)
java·redis·springboot
YJlio24 分钟前
PsPing 学习笔记(14.7):一条龙网络体检脚本——连通性、延迟、带宽全都要
开发语言·网络·笔记·python·学习·pdf·php
魏波.26 分钟前
SpringBoot中Profile 多环境配置(dev/test/prod)详解
spring boot
航Hang*29 分钟前
第五章:网络系统建设与运维(高级)—— VLAN高级特性
运维·服务器·网络·笔记·计算机网络·华为·ensp