springboot的SPI机制

SPI,即Service Provider Interface,为某个接口寻找服务实现的机制。

在springboot的启动类上面,我们一般会标注启动类注解@SpringBootApplication,而@SpringBootApplication是@SpringBootConfiguration @EnableAutoConfiguration @ComponentScan等多个注解的合体,SPI机制的入口注解是@EnableAutoConfiguration,即springboot标注该注解,表示可以实现自动配置.

@EnableAutoConfiguration注解如下

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import({EnableAutoConfigurationImportSelector.class})
public @interface EnableAutoConfiguration {
    String ENABLED_OVERRIDE_PROPERTY = "spring.boot.enableautoconfiguration";

    Class<?>[] exclude() default {};

    String[] excludeName() default {};
}

我们可以看到,该注解import了一个EnableAutoConfigurationImportSelector类

该类有一个方法

protected List<String> getCandidateConfigurations(AnnotationMetadata metadata, AnnotationAttributes attributes) {
        List<String> configurations = SpringFactoriesLoader.loadFactoryNames(this.getSpringFactoriesLoaderFactoryClass(), this.getBeanClassLoader());
        Assert.notEmpty(configurations, "No auto configuration classes found in META-INF/spring.factories. If you are using a custom packaging, make sure that file is correct.");
        return configurations;
    }

该方法会通过SpringFactoriesLoader遍历整个ClassPath中所有jar包下的spring.factories文件

所以我们自己开发的组件,如果想无缝融合到springboot中,就可以构建一个starter包,在该包中META-INF/spring.factories写入我们的组件的启动类的名称,springboot就可以通过SPI机制在启动的时候,自动加载并启动我们的组件。

SpringFactoriesLoader 源码解析可参考

https://andyboke.blog.csdn.net/article/details/84025989?utm_medium=distribute.pc_relevant.none-task-blog-searchFromBaidu-2.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-searchFromBaidu-2.control

SpringBoot的自动装配原理、自定义starter与spi机制,一网打尽_阳阳的技术博客_51CTO博客

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值