自定义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>
相关推荐
初次攀爬者19 小时前
RocketMQ在Spring Boot上的基础使用
java·spring boot·rocketmq
花花无缺19 小时前
搞懂@Autowired 与@Resuorce
java·spring boot·后端
Derek_Smart21 小时前
从一次 OOM 事故说起:打造生产级的 JVM 健康检查组件
java·jvm·spring boot
Nyarlathotep01131 天前
SpringBoot Starter的用法以及原理
java·spring boot
dkbnull2 天前
深入理解Spring两大特性:IoC和AOP
spring boot
洋洋技术笔记2 天前
Spring Boot条件注解详解
java·spring boot
洋洋技术笔记3 天前
Spring Boot配置管理最佳实践
spring boot
用户8307196840824 天前
Spring Boot 项目中日期处理的最佳实践
java·spring boot
大道至简Edward4 天前
Spring Boot 2.7 + JDK 8 升级到 Spring Boot 3.x + JDK 17 完整指南
spring boot·后端
洋洋技术笔记4 天前
Spring Boot启动流程解析
spring boot·后端