自定义spring-boot-starter

自定义命名规范:格式:{项目名}-spring-boot-starter

1. 项目结构

javascript 复制代码
my-spring-boot-starter
├── src
│   └── main
│       ├── java
│       │   └── com/example/starter
│       │       ├── MyStarterProperties.java
│       │       └── MyStarterAutoConfiguration.java
│       └── resources
│           └── META-INF
│               └── spring.factories
└── pom.xml

2. 添加依赖(pom.xml

javascript 复制代码
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.12.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <groupId>com.example</groupId>
    <artifactId>my-spring-boot-starter</artifactId>
    <version>1.0.0</version>
    <packaging>jar</packaging>

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

        <!-- 可选:使application.yml 有配置提示功能  optional=ture 只在当前项目有用,不会进行依赖传递 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>
    </dependencies>
</project>

3.1 配置属性类(MyStarterProperties.java

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

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

@ConfigurationProperties(prefix = "my.starter")
public class MyStarterProperties {

    private String message = "默认消息";
    
    public String getMessage() { return message; }

    public void setMessage(String message) { this.message = message; }
}

3.2 自动配置类(MyStarterAutoConfiguration.java

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

import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
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(MyStarterProperties.class)
public class MyStarterAutoConfiguration {
    
    // MyServiceImpl 功能实现类
    @Bean
    @ConditionalOnMissingBean
    public MyService myService(MyStarterProperties properties) {
        return new MyServiceImpl(properties.getMessage());
    }
}

4. 配置自动加载(spring.factories

  • 方式 1(spring-boot 2.x) :在 src/main/resources/META-INF/spring.factories 中添加,如果有多个自动配置类,使用英文逗号分割
javascript 复制代码
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
    com.example.starter.MyStarterAutoConfiguration
  • 方式 2(Spring Boot 3.x+ 推荐) :在 src/main/resources/META-INF/spring/AutoConfiguration.imports 中直接写类名,如果有多个自动配置类,不需要使用任何分隔符(如逗号、分号、空格等) 。每个类名应该独占一行
javascript 复制代码
com.example.starter.MyStarterAutoConfiguration

5. 放入本地maven仓库

javascript 复制代码
mvn clean install

6. 其它项目(模块)引入使用

javascript 复制代码
<dependency>
    <groupId>com.example</groupId>
    <artifactId>my-spring-boot-starter</artifactId>
    <version>1.0.0</version>
</dependency>
相关推荐
Flittly5 小时前
【雕虫大技】Agent 动态 Skill 供应链安全加固(三):输出校验与治理闭环实战
java·spring boot·spring
小强库计算机毕业设计10 小时前
基于 Spring Boot + Vue3 的校园管理系统
java·spring boot·后端·项目实战·管理系统·技术分享·校园管理系统实战
毕设单片机13 小时前
顺顺救助站流浪动物领养系统的设计与实现46649----SpringBoot + Vue.js + MySQL|领养审核、寻宠发布、救助站点与动物论坛协同
java·spring boot·管理系统·流浪动物
云烟成雨TD13 小时前
Micrometer 系列【63】统一观测:基于 Spring Boot 的生产级演示案例 | 基于 OTLP 集成 Prometheus + Jaeger
spring boot·云原生·prometheus
csdn2015_13 小时前
springboot +mybatis 查询myql开启程序级别缓存
spring boot·缓存·mybatis
chuan.bai14 小时前
Java RAG 实战(第 8 篇):Spring Boot RAG 查询 API
java·spring boot·贪心算法
vx-程序开发14 小时前
springboot旅游推介平台---附源码24175
java·spring boot·python·spring cloud·eclipse·django·idea
小蒜学长15 小时前
“喵汪联盟”宠物领养系统的设计与实现(代码+数据库+LW)
java·spring boot·后端·宠物
xbgRS18 小时前
springboot的自动装配
java·spring boot
嘻哈∠※1 天前
0061基于 SpringBoot 的投稿与稿件处理系统设计与实现
java·spring boot·后端