一、@EnableCircuitBreaker
EnableCircuitBreaker源码如下:
从源码看出实例化了@EnableCircuitBreaker注解实例化了EnableCircuitBreakerImportSelector这个类。
再来看EnableCircuitBreakerImportSelector源码:
EnableCircuitBreakerImportSelector继承了SpringFactoryImportSelector,SpringFactoryImportSelector的selectImports方法会被springboot自动调用(SpringFactoriesLoader机制),这个selectImports方法会调用上面截图里的isEnabled方法,从而加载spring.fatories文件里的spring.cloud.circuit.breaker.enabled属性对应的类实例,也就是HystrixCircuitBreakerConfiguration的实例。
二、HystrixCircuitBreakerConfiguration
HystrixCircuitBreakerConfiguration实例化了HystrixCommandAspect类并注入容器。
HystrixCommandAspect源码如下:
从HystrixCommandAspect源码中可以看出这是一个AspectJ切面,在编译期间就会生成被@HystrixCommand注解的方法的代理。估计代理方法包含了缓存、断路器、请求合并等Hystrix流程,具体流程不再展开,以后再讲。