SpringBoot SPI机制和实现自定义 starter
本文适合于实操~,主要讲述如何自定义start,实现一些自定义类的自动装配。
面向入门、有需求和想了解的小伙伴们,以免浪费小伙伴们的时间~
实现starter,其实就是SpringBoot的自动装配原理的一个实践,以前我也写过SpringBoot的自动状态原理的文章,文章链接
细心认真对待,没有什么是很难的。
一、SpringBoot 中的SPI机制
什么是spi呢,全称是 Service Provider Interface
。简单翻译的话,就是服务提供者接口,是一种寻找服务实现的机制。
其实就是一个规范定义、或者说是实现的标准。
用生活中的例子说就是,你买了一台小米的手机。
但是你用的充电器并不一定非要是小米充电器,你可以拿其他厂商的充电器来进行充电,只要满足协议、端口等要求,那么就是可以充电的。这也是一种热拔插的思想,并不是固定死的。
换成代码来说也是一样的,我定义了一个接口,但是不想固定死具体的实现类,因为那样如果要更换实现类就要改动源代码,这往往是不合适的。
那么我也可以定义一个规范,在之后需要更换实现类或增加其他实现类时,遵守这个规范,我也可以动态的去发现这些实现类。
换在SpringBoot中,就是现在的SpringBoot这个平台定义了一些规范和标准,我现在想要让SpringBoot平台接纳我。
我该如何做呢?
很简单,按照它的标准和规范做事。
SpringBoot在启动的时候,会扫描所有jar包 resource/META-INF/spring.factories
文件,依据类的全限定名,利用反射机制将 Bean
装载进容器中。
看完这段话,我想你应该对今天的文章应该有个大概的理解啦。
二、自定义 starter
说一说我的小实践:
在这个 starter 中,实现
- 发送短线的Template
- 对象存储的Template
的自动装配~
大致就是四步~
- 用于映射配置文件中的配置的类xxxxProperties
- 用于操作xxxx的接口和客户端等等,如本文中的OssTemplate
- 自动配置类xxxxAutoConfiguration ,并且向容器中注入xxxxTemplate
- 在spring.factories中将xxxxAutoConfiguration添加进EnableAutoConfiguration的vaule集合中
对象存储我用的是阿里云的oss,里面的配置都是可以用的, 短信的话,就是个模拟的啦~,勿怪啦
2.1、准备一个Maven项目
删除src目录,
然后再创建两个 Maven项目(我个人习惯,习惯创建空Maven项目,实际上创建SpringBoot项目也是一样)
最外层的pom.xml