博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
编写自己的SpringBoot-starter
阅读量:6981 次
发布时间:2019-06-27

本文共 2634 字,大约阅读时间需要 8 分钟。

hot3.png

前言

原理

首先说说原理,我们知道使用一个公用的starter的时候,只需要将相应的依赖添加的Maven的配置文件当中即可,免去了自己需要引用很多依赖类,并且SpringBoot会自动进行类的自动配置。那么 SpringBoot 是如何知道要实例化哪些类,并进行自动配置的呢? 下面简单说一下。

第一步

首先,SpringBoot 在启动时会去依赖的starter包中寻找 resources/META-INF/spring.factories 文件,然后根据文件中配置的Jar包去扫描项目所依赖的Jar包,这类似于 Java 的 SPI 机制。

## 第二步 第二步,根据 spring.factories配置加载AutoConfigure类。

第三步

最后,根据 @Conditional注解的条件,进行自动配置并将Bean注入Spring Context 上下文当中。

我们也可以使用@ImportAutoConfiguration({MyServiceAutoConfiguration.class}) 指定自动配置哪些类。

实现

第一步

创建一个SpringBoot 项目,并添加下面两个依赖到pom.xml文件当中

org.springframework.boot
spring-boot-configuration-processor
true
org.springframework.boot
spring-boot-autoconfigure

其中 spring-boot-configuration-processor 的作用是编译时生成 spring-configuration-metadata.json ,此文件主要给IDE使用。如当配置此jar相关配置属性在 application.yml ,你可以用ctlr+鼠标左键点击属性名,IDE会跳转到你配置此属性的类中。

命名规则

我们日常使用的Spring官方的Starter一般采取spring-boot-starter-{name} 的命名方式,如 spring-boot-starter-web 。

而非官方的Starter,官方建议 artifactId 命名应遵循{name}-spring-boot-starter 的格式。 例如:ysc-spring-boot-starter 。

com.ysc
simple-spring-boot-starter
1.0.0-SNAPSHOT
jar

第二步

编写我们的Service类. == 功能类

这里讲一下我们的Starter要实现的功能,很简单,提供一个Service,包含一个能够将配置文件中配置的字符串根据传入的字符进行分割的方法String[] split(String separatorChar)。

public class StarterService {    private String config;    public StarterService(String config) {        this.config = config;    }        public String[] split(String separatorChar) {        return StringUtils.split(this.config, separatorChar);    }    }

第三步编写配置文件读取类

@ConfigurationProperties("example.service")public class StarterServiceProperties {    private String config;        public void setConfig(String config) {        this.config = config;    }        public String getConfig() {        return config;    } }

## 第四步, 编写AutoConfigure类 ,这步是关键点

@Configuration@ConditionalOnClass(StarterService.class)@EnableConfigurationProperties(StarterServiceProperties.class)public class StarterAutoConfigure {    @Autowired    private StarterServiceProperties properties;    @Bean    @ConditionalOnMissingBean    @ConditionalOnProperty(prefix = "example.service", value = "enabled", havingValue = "true")    StarterService starterService (){        return new StarterService(properties.getConfig());    }}

最后一步,

在resources/META-INF/下创建spring.factories文件,并添加如下内容:

org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.example.autocinfigure.StarterAutoConfigure

发布

测试

链接

转载于:https://my.oschina.net/u/3421984/blog/3031952

你可能感兴趣的文章
初识set集合
查看>>
怎么寻回调整分区后盘符丢失的数据
查看>>
警惕!MySQL成数据勒索新目标
查看>>
linux系统学习第一天
查看>>
eclipse的安卓开发插件『ADT』在线安装不成功的解决方案
查看>>
第12章,网络管理(下)网络基础配置
查看>>
DTU是什么 DTU种类及应用领域分析
查看>>
基于Zynq-7000高速数据采集解决方案
查看>>
【VMware vSAN 6.6】5.2.运行状况:我们有软硬件项目解决方案
查看>>
细数iOS上的那些安全防护
查看>>
tar命令常用参数解释
查看>>
SourceTree跳过Atlassian账号,免登陆,跳过初始设置
查看>>
刷屏的海底捞超级APP究竟是怎样与阿里云合作的
查看>>
redhat linux 访问控制
查看>>
DNS--1--基础概念
查看>>
万能的model数据选择列表
查看>>
FreeCodeCamp:Return Largest Numbers in Arrays
查看>>
C#接口
查看>>
nginx: [error] invalid PID number "" in "/usr/local/nginx/logs/nginx.pid"
查看>>
敏捷开发团队管理系列之一:序言与出发点
查看>>