spring源码-SpringFactoryImportSelector

123 阅读1分钟

介绍

今天在研究hystrix源码的时候,在查看其加载过程中,发现了SpringFactoryImportSelector,简单记录一下它的功能;

它与普通的@Comonent的区别就是可以灵活引入功能&控制开关; spring SPI

使用

启动类上添加注解@EnableCircuitBreaker

注解中使用import引入 EnableCircuitBreakerImportSelector


@Target(ElementType.TYPE)

@Retention(RetentionPolicy.RUNTIME)

@Documented

@Inherited

@Import(EnableCircuitBreakerImportSelector.class)

public @interface EnableCircuitBreaker {

}

EnableCircuitBreakerImportSelector 实现了SpringFactoryImportSelector(包含泛型信息)

通过这种方式实现了hystrix相关能力的引入

原理

  • spring首先会加载EnableCircuitBreakerImportSelector;

  • 获取其携带泛型信息;

  • 全局jar包中搜索META-INF/spring.factories;

  • 选择spring.factories中对上述泛型的配置类;(此处属于springboot的自动配置过程,不熟悉可以自行了解)

  • image.png

  • 对相关配置类进行引入。

  • importSelector的详细处理流程不需再补充。

相关

@Enable*** 所有此类注解的实现原理都是大致相同的。