如何自定义一个springboot starter(超详细)

本文详细指导如何创建一个Spring Boot Starter,包括项目结构、依赖配置、功能模块实现(如字符串分割)、自动配置及spring.factories文件的应用,最后演示如何在其他项目中引入和测试。
摘要由CSDN通过智能技术生成

如何自定义一个springboot starter,以供之后项目引用使用

新建一个maven项目,并引入必须的依赖

1、这种用于starter的项目的名称一般格式为:xxx-spring-boot-starter,并且在创建项目时规范好包名称。
2、引入相关的依赖

image-20210718165124244

3、创建starter要实现的功能模块(就是之后你生成的依赖所要使用的功能,只要在别的项目被引入maven依赖,就可以直接使用这里面的方法了。)
下面是实现的一个以“,”分割字符串的小功能的实现代码:
ISplitService
package com.johnhum.springboot.service;

import java.util.List;

/**
 * @author Johnhum on 2021/7/18
 */
public interface ISplitService {
    List<String> split(String value);
}
SplitServiceImpl
package com.johnhum.springboot.service.impl;

import com.johnhum.springboot.service.ISplitService;
import org.springframework.util.StringUtils;

import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

/**
 * @author Johnhum on 2021/7/18
 */
public class SplitServiceImpl implements ISplitService {
    @SuppressWarnings("all")
    @Override
    public List<String> split(String value) {
        return Stream.of(StringUtils.split(value, ",")).collect(Collectors.toList());
    }
}
4、重头戏来咯,这里的SplitAutoConfigure类是实现把创建的字符串分割功能以配置组件的形式加入IOC容器中,方便被扫描。
package com.johnhum.springboot.conf;

import com.johnhum.springboot.service.ISplitService;
import com.johnhum.springboot.service.impl.SplitServiceImpl;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @author Johnhum on 2021/7/18
 */
@Configuration
@ConditionalOnClass(value = {ISplitService.class, SplitServiceImpl.class})
public class SplitAutoConfigure {
    @Bean
    @ConditionalOnMissingBean
    ISplitService startService() {
        return new SplitServiceImpl();
    }
}

5、创建spring.factories文件,保证我们所自定义的配置类加入候选配置中(只要别的项目引入该字符串分割功能依赖就立即被加载到springIOC容器中)

org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.johnhum.springboot.conf.SplitAutoConfigure

注意:spring.factories文件必须要在classpath路径(resources)下的/META-INF文件夹下,并且名字必须为spring.factories。这是因为springboot自动装配机制就是通过这个路径下的spring.factories文件去加载类或者依赖的。

6、打包

运行 mvn clean install -Dmaven.test.skip=true

image-20210718172857982

这样就会打包到我们的maven仓库中,进入仓库目录可以发现已经生成好的split-spring-boot-starter-1.0-SNAPSHOT.jar

image-20210718173127900

7、使用split-spring-boot-starter-1.0-SNAPSHOT.jar

我们在另外的springboot工程中直接引入打好包的依赖。
<dependency>
    <groupId>com.johnhum.springboot</groupId>
    <artifactId>split-spring-boot-starter</artifactId>
    <version>1.0-SNAPSHOT</version>
</dependency>

8、编写测试类测试

package com.jonhum.springboot;

import com.alibaba.fastjson.JSON;
import com.johnhum.springboot.service.ISplitService;
import com.jonhum.springboot.conf.SpringbootConf;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

/**
 * @author Johnhum on 2021/7/18
 */
@Slf4j
@SpringBootTest
public class AppTest {

    @Autowired
    SpringbootConf springbootConf;

    @Autowired
    private ISplitService splitServiceImpl;

    @Test
    public void splitTest() {
        log.info("split context: {}", JSON.toJSONString(splitServiceImpl.split(springbootConf.getContext())));
    }
}

这里贴出要测试类所在工程的配置文件的截图

image-20210718173953941

测试成功并输出相应方法的结果。

image-20210718174206882

自定义一个Spring Boot起步依赖,需要按以下步骤进行: 1. 创建一个Maven或Gradle项目:在项目中包含需要共享的类和资源,例如自定义配置类、工具类和默认资源文件。 2. 创建一个Spring Boot Starter模块:该模块应该是一个不包含实际业务逻辑的模块,只提供Spring Boot自动配置和一些基础服务。例如,可以定义一个名为“my-spring-boot-starter”的模块。 3. 在Starter模块中定义自动配置类:自动配置类应该实现Spring Boot的`org.springframework.boot.autoconfigure.EnableAutoConfiguration`接口,并使用`@Configuration`注解进行标注。在自动配置类中,可以定义需要自动配置的bean、配置属性等。 4. 在Starter模块中定义Starter类:Starter类应该使用`@SpringBootConfiguration`注解进行标注,并且应该引入自动配置类和其他需要的依赖。例如,可以定义一个名为“my-spring-boot-starter-spring-web”的Starter类,引入Spring Web依赖和自动配置类。 5. 在Starter模块中定义项目启动类:启动类应该使用`@SpringBootApplication`注解进行标注,并且应该引入Starter类。例如,可以定义一个名为“my-spring-boot-app”的启动类,引入“my-spring-boot-starter-spring-web”Starter类。 6. 发布Starter模块到Maven中央仓库或私有仓库:发布Starter模块到Maven中央仓库或私有仓库中,使其他用户可以通过Maven或Gradle依赖该Starter模块。 7. 在其他项目中使用Starter模块:在其他Spring Boot项目中,可以通过在pom.xml或build.gradle中引入Starter模块依赖,从而自动获取Starter模块中定义的自动配置和基础服务。 以上步骤是自定义Spring Boot起步依赖的基本流程,根据实际情况可以进行适当调整。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值