> 文章列表 > SpringBoot的Starter封装示例

SpringBoot的Starter封装示例

SpringBoot的Starter封装示例

为什么要封装starter?

假设没有starter这个东西,如果要在spring项目中使用Jef-Flow(https://gitee.com/chengzhi2/jef-flow) 需要配置一个bean,虽然封装成了jar包,但是你还是要知道JefFlowAutoExcutor在哪里这样才能方便你去配置sring.xml,或者使用的时候只能通过new的方式。new虽然看起来也很简单,但是Jef-Flow中还内置了节点注册表,会在启动的时候自动注册定义好的节点。那么使用new该如何处理这部分逻辑呢,开发者还得自己去完成节点注册。如果使用starter,这些逻辑都已经帮开发者处理好了,使用的时候只需要简单的配置即可。

封装start方式1

1、pom.xml中引入依赖包

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId><version>2.4.2</version>
</dependency>

2、创建spring.factories文件
文件中定义自动配置类,内容如下:

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\\pers.cz.starter.JefFlowAutoConfiguration

3、创建自动配置类

public class JefFlowAutoConfiguration {@Beanpublic JefFlowAutoExcutor autoUiExcutor() {LogUtils.debug("我被扫描到了....");return new JefFlowAutoExcutor();}
}

这样一个starter就封装好了,直接在新项目中导入即可使用,不需要任何配置。

封装starter的另一种方式

不使用spring.factories来指定自动配置类(方式2)

1、引入依赖包
2、创建自定义注解

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Import(JefFlowSelector.java
.class)
public @interface EnableJefFlow {}

3、创建扫描类JefFlowSelector.java并实现ImportSelector接口

public class JefFlowSelector implements ImportSelector {@Overridepublic String[] selectImports(AnnotationMetadata annotationMetadata) {return new String[] {"pers.cz.starter.JefFlowAutoConfiguration"};}
}

4、在使用starter的启动类上添加注释EnableJefFlow即可

实验:

试验了一下,如果自定义了一个jar包,里面只配置了spring.factories。引入到项目中后也会被springBoot扫描到,认为这是个starter,但是在使用的时候就会报错了。因为没有把bean注册进去。

日常的一些公共代码其实都可以抽象为一个starter,比如常用的工具类,或者一些组件。使用的时候只需引入即可,日常工作中,自己可以积累一些工具,这样就不用每次去搬代码了。

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