如何自定义一个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

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐