概述
1.SPI思想
SPI的全名为Service Provider Interface加粗样式.这个是针对厂商或者插件的,随意插拔。
服务发现,就是不用再导入特定的包路径,会在MATA-INF.service自己设置接口的,jar包知用换这路径,原有代码不用变java spi就是提供这样的一个机制:为某个接口寻找服务实现的机制。
例如:
jbbc的路径cj问题,我们代码原来写死的路径的话,没法改,变成配置文件告诉使用者,我提供接口是哪个类,这不就动态了吗。
2.SPI约定
当服务的提供者,提供了服务接口的一种实现之后,在jar包的META-INF/services/目录里同时创建一个以服务接口命名的文件,这是自己定的。该文件里就是实现该服务接口的具体实现类的全限定类名,就是对外开放的接口。而当外部程序装配这个模块的时候,**就能通过该jar包META-INF/services/里的配置文件找到具体的实现类名,并装载实例化,完成模块的注入。**通过这个约定,就不需要把服务放在代码中了,通过模块被装配的时候就可以发现服务类了。
3.springboot中的类SPI扩展机制
在springboot的自动装配过程中,
- SpringFactoriesLoader加载会加载META-INF/spring.factories文件,
- 从CLASSPATH下的每个Jar包中搜寻所有META-INF/spring.factories配置文件,
- 然后将解析properties文件,找到指定名称的配置后返回,工厂模式反射创建好bean。
- 需要注意的是,其实这里不仅仅是会去ClassPath路径下查找,会扫描所有路径下的Jar包,只不过这个文件只会在Classpath下的jar包中。
最后
以上就是高大路人为你收集整理的Spring Boot的SPI机制的全部内容,希望文章能够帮你解决Spring Boot的SPI机制所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复