自定义starter

97 阅读1分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 2 天,点击查看活动详情

1.新建工程

image.png 默认pom.xml文件为: image.png

2.pom.xml文件引入依赖

image.png

<parent>
    <groupId>org.springframework.boot</groupId>
    <version>2.1.4.RELEASE</version>
    <artifactId>spring-boot-starters</artifactId>
</parent>
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-configuration-processor</artifactId>
        <optional>true</optional>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-autoconfigure</artifactId>
    </dependency>
</dependencies>

3.新增com.imooc.springboot包

image.png

  • 新增x类文件:无任何含义,为了能够更好的创建多个包
  • 新增configure包
  • 新增service包

4.定义接口类ISplitService

image.png

public interface ISplitService {
    List<String> split(String value);
}

代码说明: 定义一个传参为字符串返回数组的方法

5.新增impl包并且实现接口方法

image.png

public class SplitServiceImpl implements ISplitService {
    @SuppressWarnings("all")
    @Override
    public List<String> split(String value) {
        List<String> list = new ArrayList<>();
        list.add(value);
        list.add("123");
        return list;
    }
}

代码说明:

  • @SuppressWarnings("all"):注解是jse提供的注解。作用是屏蔽一些无关紧要的警告。使开发者能看到一些他们真正关心的警告。从而提高开发者的效率
  • split方法:根据传入的字符串,构建成一个list返回

6.定义配置配置文件SplitAutoConfigure

image.png

SplitAutoConfigure.java

@Configuration
@ConditionalOnClass(value = {ISplitService.class, SplitServiceImpl.class})
public class SplitAutoConfigure {
    @Bean
    @ConditionalOnMissingBean
    ISplitService starterService(){
        return new SplitServiceImpl();
    }
}

代码说明:

  • @Configuration:注解配置类
  • @ConditionalOnClass:这个注解通俗的说就是Spring工程中引用了value里的包 才会构建这个bean

7.新增META-INF文件夹,并且新增spring.factories配置文件

image.png
spring.factories配置如下:(配置对应的SplitAutoConfigure)

org.springframework.boot.autoconfigure.EnableAutoConfiguration=
com.imooc.springboot.configure.SplitAutoConfigure

8.生成jar包

image.png
生成的目录如下: image.png 架包文件如下: image.png

9.另外一个项目在pom.xml配置依赖

image.png

10.调用该方法

image.png 可以看到返回的结果和我们设想的一样 image.png