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

如何创建一个 Springboot Starter

1.创建一个 空项目 xxx-spring-boot-starter 作为场景启动器,方便别人引用

2.创建xxx-spring-boot-autoconfigure:包含自动配置类、属性类、核心服务等

3.注册自动配置(Spring Boot 2.7+ / 3.x)

resources目录下创建:
META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports

文件内容为自动配置类的全限定名,一行一个,例如:

com.example.starter.autoconfigure.GreeterAutoConfiguration

自动配置类
自动配置类是 Starter 的灵魂。它使用条件注解,确保仅在特定条件下生效。

import org.springframework.boot.autoconfigure.AutoConfiguration;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;

@AutoConfiguration // Spring Boot 2.7+ 引入,等价于 @Configuration 且有自动配置语义
@EnableConfigurationProperties(GreeterProperties.class)
@ConditionalOnClass(GreeterService.class) // 当类路径中存在该类时才生效
@ConditionalOnProperty(prefix = "greeter", name = "enabled", havingValue = "true", matchIfMissing = true)
public class GreeterAutoConfiguration {

@Bean
@ConditionalOnMissingBean
public GreeterService greeterService(GreeterProperties properties) {
return new GreeterService(properties);
}
}

核心服务类
核心的业务逻辑放在这里

public class GreeterService {
private final GreeterProperties properties;

public GreeterService(GreeterProperties properties) {
this.properties = properties;
}

public String greet(String name) {
return properties.getPrefix() + " " + name + properties.getSuffix();
}
}

属性配置类
配置核心服务类需要的属性名称

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

@ConfigurationProperties(prefix = "greeter")
public class GreeterProperties {
/**
* 问候语前缀,默认为 "Hello"
*/
private String prefix = "Hello";

/**
* 问候语后缀,默认为 "!"
*/
private String suffix = "!";

// getter / setter 略
}

http://www.jsqmd.com/news/786344/

相关文章:

  • OpenClaw 用户如何快速配置 Taotoken 聚合端点实现多模型调用
  • 【2026最新版|收藏备用】用Skill简化大模型知识库连接,小白程序员入门必看
  • Dify工作流实战:构建HR与网络安全AI应用脚本库
  • 09-扩展知识——05. date 类 - 处理日期
  • 基于Kubernetes的AI应用控制平面:kiro-acp架构解析与实践指南
  • Bean 会被 JVM 回收吗?
  • Animal-AI环境:连接强化学习与认知科学的3D虚拟实验室
  • 网络安全工程师超详细职业规划!零基础从入门到精通全程路线,看这一篇就够了
  • 收藏!2026年转AI大模型应用开发,正确学习顺序别踩坑(小白/程序员必看)
  • Undertow高性能Web服务器:架构解析与Java微服务实战
  • 医学影像分割:2D超图像与3D网络性能对比与选型指南
  • AI编程助手本地化提速:钩子拦截模式实现零延迟命令执行
  • Clawd-Code:基于LLM与代码库构建智能开发Agent的开源框架
  • CANN/cann-learning-hub:算子Kernel直调编程
  • 收藏必看!2026年AI内卷混战风口拆解,小白也能轻松入局大模型
  • OpenClaw本地AI智能体部署指南:从Docker到多平台实战
  • SSD主控架构到工业存储落地:天硕自研主控技术路径参照
  • 2026年国内GEO公司综合实力前五强榜单推荐:主流头部GEO服务商实力全解析 - GEO优化
  • 2026 年广州 GEO 服务商综合实力五强榜单与实战选型指南 - GEO优化
  • 容器是怎么管理 Bean 的?
  • 2026年近期大庆企业如何选择专业可靠的短视频服务伙伴? - 2026年企业推荐榜
  • 云原生性能测试平台OpenClaw Cloud:架构解析与实战部署指南
  • 第四篇:RDB与AOF持久化——宕机后数据怎么恢复?
  • 2026年最新趋势:西安外贸企业如何选择建站服务商突围海外市场? - 2026年企业推荐榜
  • 认知科学视角下的AGI评测:超越传统基准的多维能力评估框架
  • AI工作流引擎:构建可观测、可扩展的AI应用开发框架
  • 抖音直播录制神器:40+平台自动值守,永久保存精彩瞬间
  • 通用人工智能系统(GPAIS)的技术挑战与可信AI治理框架
  • AutoKG:大语言模型与远程监督驱动的自动化知识图谱构建实战
  • CANN/ascend-transformer-boost算子演示示例