我是靠谱客的博主 时尚人生,最近开发中收集的这篇文章主要介绍如何凭借spring的spi机制制作自己的starter,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

背景:

        前面讲到了如何修改开源工具源码,上传至maven中央仓库,但是我觉得还不够完美,加载外部字典需要自己在代码中初始化,外部文件位置也是需要写死。如果我们能将配置卸载spring配置文件中,使用时像restTemplate等一样直接注入即可使用就更完美了。

解决措施:将jar包做成spring的starter。

什么是spi:

        Service Provider Interface(SPI) 是一种服务发现机制。SPI 的本质是将接口实现类的全限定名配置在文件中,并由服务加载器读取配置文件,加载实现类。这样可以在运行时,动态为接口替换实现类。正因此特性,我们可以很容易的通过 SPI 机制为我们的程序提供拓展功能。

通俗来讲spi就是就是一种为了拓展而对外提供的约定,在java中 spi可以分为 jdk提供的spi spring提供的spi。数据库驱动接口由jdk提供,而实现由具体的数据库厂商提供,这就是依托的jdk提供的spi。在spring体系中,我们用的各种template,我们引入依赖后为什么可以直接注入使用?spring并不知道其他三方组件该如何初始化,哪些些需要在启动的时候就放入spring容器。这时作为三方组件,想要将自己整合进spring,就需要遵守spring的spi机制。

原理:

        我们随意打开一个springboot项目的启动类,如下:

再打开@SpringBootApplication注解源码

 这里需要注意两个注解

@ComponentScan注解的作用是扫描@SpringBootApplication所在的Application类(即spring-boot项目的入口类)所在的包(basepackage)下所有的@component注解(或拓展了@component的注解)标记的bean,并注册到spring容器中。
 

  @EnableAutoConfiguration注解加载的是资源目录META-INF文件下的spring.factories的文件。包括导入到项目中的Jar包的META-INF文件夹下的spring.factories文件。spring.factories文件是一个properties文件。

  我的spring.factories 如下:

                

spring.factories 此次key为EnableAutoConfiguration,表示spring启动后会自动创建value对应的类,即JPingYingAutoConfiguration,如果需要创建多个类可以用逗号将value隔开。

接下来我们看看JPingYingAutoConfiguration的写法

 @ConditionalOnClass({PinyinUtil.class})//判断当前classpath下是否存在指定类,若是则将当前的配置装载入spring容器

@EnableConfigurationProperties(JPingYingProperties.class)//激活自动配置(指定文件中的配置)

我们来看看properies类


        

 此类的目的就是用来承接spring的配置文件中的配置,spring启动会自动将数据装载进这个类的实例中,我们可以再自己的jar包中需要的时候直接注入,然后使用。

   我们再来看看需要引入的依赖

 核心依赖是autoconfigure,这个包是准备为方便三方包整合进spring提供的。

processsor包主要功能即使在maven打包的时候生成spring-configuration-metadata.json,如下

 我们打开看下内容

 可以看出来它其实就是提取了properties文件类型,重新组织成了一个json文件。

该文件的作用就是当我们在spring配置文件中配置的时候会根据该文件生成提示。

然后配置好jar包坐标

 

至此,你就拥有了一个自己的starter,将该starter上传至镜像库,就算完成了。

       上传jar包至maven中央仓库可参考我的上篇博客

        如何上传自己的jar包到maven中央仓库

 

        

        

最后

以上就是时尚人生为你收集整理的如何凭借spring的spi机制制作自己的starter的全部内容,希望文章能够帮你解决如何凭借spring的spi机制制作自己的starter所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(39)

评论列表共有 0 条评论

立即
投稿
返回
顶部