介绍
今天在研究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的自动配置过程,不熟悉可以自行了解)
-
-
对相关配置类进行引入。
-
importSelector的详细处理流程不需再补充。
相关
@Enable*** 所有此类注解的实现原理都是大致相同的。