自定义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>
相关推荐
小兔崽子去哪了27 分钟前
Java 登录专题
java·spring boot·后端
北城以北888836 分钟前
RabbitMQ基础知识
spring boot·分布式·rabbitmq·intellij-idea
invicinble40 分钟前
网站设计整体思路
spring boot
小许好楠1 小时前
SpringBoot连接kafka
spring boot·kafka·linq
大学生资源网1 小时前
基于springboot的智能家居系统的设计与实现(源码+文档)
java·spring boot·后端·毕业设计·源码
计算机毕设VX:Fegn08951 小时前
计算机毕业设计|基于springboot + vue校园招聘系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计
武子康2 小时前
Java-211 Spring Boot 2.4.1 整合 RabbitMQ 实战:DirectExchange + @RabbitListener 全流程
java·spring boot·分布式·消息队列·rabbitmq·rocketmq·java-rabbitmq
毕设源码-赖学姐2 小时前
【开题答辩全过程】以 果树的生长信息管理系统为例,包含答辩的问题和答案
java·spring boot
大学生资源网2 小时前
基于springboot的南京特色美食小吃商城(源码+文档)
java·spring boot·后端·mysql·毕业设计·源码
2501_9167665410 小时前
【Springboot】数据层开发-数据源自动管理
java·spring boot·后端