当前位置: 首页 > news >正文

【Spring Boot】自定义starter

Spring Boot 自定义Starter

为什么要自定义Starter

Spring Boot Starter 是一种简化依赖管理和自动配置的机制。下面详细介绍如何创建自定义 Starter。

Starter 的基本概念

命名规范

官方 Starter: spring-boot-starter-{name}
自定义 Starter: {name}-spring-boot-starter

核心组件

autoconfigure 模块: 包含自动配置逻辑

starter 模块: 只包含依赖管理

创建自定义 Starter

项目结构

my-starter/
├── my-spring-boot-autoconfigure/
│   ├── src/main/java/
│   │   └── com/example/mystarter/
│   └── pom.xml
└── my-spring-boot-starter/├── src/main/resources/│   └── META-INF/│       └── spring.factories└── pom.xml

自动配置模块

<!-- my-spring-boot-autoconfigure/pom.xml -->
<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-autoconfigure</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional></dependency>
</dependencies>

配置属性类

@ConfigurationProperties(prefix = "my.service")
public class MyServiceProperties {private String prefix = "Hello";private String suffix = "!";// getters and setterspublic String getPrefix() { return prefix; }public void setPrefix(String prefix) { this.prefix = prefix; }public String getSuffix() { return suffix; }public void setSuffix(String suffix) { this.suffix = suffix; }
}

服务类

public class MyService {private final String prefix;private final String suffix;public MyService(String prefix, String suffix) {this.prefix = prefix;this.suffix = suffix;}public String wrap(String message) {return prefix + " " + message + " " + suffix;}
}

自动配置类

@Configuration
@ConditionalOnClass(MyService.class)
@EnableConfigurationProperties(MyServiceProperties.class)
public class MyServiceAutoConfiguration {@Bean@ConditionalOnMissingBeanpublic MyService myService(MyServiceProperties properties) {return new MyService(properties.getPrefix(), properties.getSuffix());}@Bean@ConditionalOnProperty(name = "my.service.enabled", havingValue = "true")@ConditionalOnMissingBeanpublic MyServiceController myServiceController(MyService myService) {return new MyServiceController(myService);}
}

注册自动配置

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

org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.example.mystarter.MyServiceAutoConfiguration

需要注意,spring boot 3.x 取消了spring.factories, 替代方案为在路径 src/main/resources/META-INF/spring 创建一个文件org.springframework.boot.autoconfigure.AutoConfiguration.imports

把需要自动装配一行一行放入

com.example.mystarter.MyServiceAutoConfiguration
http://www.hskmm.com/?act=detail&tid=17856

相关文章:

  • PrintNightmare漏洞仍未终结:深入解析PnP配置绕过与防护方案
  • Go 1.26 内置函数 new 新特性
  • 基于BP神经网络的激光焊接数据预测
  • 重要公式 - Emi
  • apt 还是 uv
  • 软件构造中的数据处理(sql) 6章
  • 树的重心(邻接表)
  • 语音芯片怎样接? 语音芯片有哪些常见接口类型?
  • 详细介绍:2025华为杯A题B题C题D题E题F题选题建议思路数学建模研研究生数学建模思路代码文章成品
  • Gitee vs. GitLab:中国开发者为何选择本土代码托管平台?
  • AtCoder Beginner Contest 424
  • ClkLog埋点分析系统-私有化部署+轻量灵活
  • 级数 - Emi
  • 线性代数 - Emi
  • 基于 Docker 的 Nginx + OpenSSL 自签名证书启用 HTTPS
  • 基于STM32的正弦波逆变器设计
  • 高校固定资产管理高效的系统——Java EE毕业设计资源包
  • ======================================分割线======================================
  • 标准卷积和空洞卷积--适应不同尺寸的输入--ASPP模块
  • 游戏在高负载场景下,整机功耗控制在多少
  • 打印机状态错误,怎么恢复正常打印?
  • 使用Ollama 0.12.2本地部署大模型,友好界面对话,开启飞行模式数据完全存在本地
  • 牛客刷题-Day5
  • 用标准版平板干翻上代Pro,小米又想学苹果了?
  • VonaJS多租户同时支持共享模式和独立模式
  • 记录一下第一次为Dify贡献插件的经历
  • 物联网字节校验常用方法
  • STM32H743-ARM例程2-UART命令控制LED - 实践
  • 完整教程:Zookeeper与Kafka:分布式系统中的协调与消息队列
  • vite-vue3 项目优化首屏加载速度