Spring-cloud学习笔记—Ribbon源码剖析之RestTemplate对象绑定拦截器过程
1. 查看Ribbon源码来源分析
- 我们在
RestTemplate
实例上添加了⼀个@LoadBalanced
注解,就可以实现负载均衡,很神奇,我们接下来分析这个注解背后的操作(负载均衡过程) - 查看
@LoadBalanced
注解,那这个注解是在哪⾥被识别到的呢?
SpringCloud
充分利⽤了SpringBoot
的⾃动装配特点,找spring.factories
配置⽂件,在netflix-ribbon
的jar包中
查看类头
@Configuration @Conditional(RibbonAutoConfiguration.RibbonClassesConditions.class) @RibbonClients //表示在装配完 org.springframework.cloud.netflix.eureka.EurekaClientAutoConfiguration之后 //才能装配 RibbonAutoConfiguration @AutoConfigureAfter(name = "org.springframework.cloud.netflix.eureka.EurekaClientAutoConfiguration") //表示 RibbonAutoConfiguration 要在括号里的东西进行装配前 来装配 @AutoConfigureBefore({LoadBalancerAutoConfiguration.class, AsyncLoadBalancerAutoConfiguration.class}) @EnableConfigurationProperties({RibbonEagerLoadProperties.class, ServerIntrospectorProperties.class}) public class RibbonAutoConfiguration { ... ...
类头研究顺序
- 研究
LoadBalancerAutoConfiguration
@Configuration //只有当RestTemplate.class存在的时候,该配置类的配置才会生效 @ConditionalOnClass(RestTemplate.class) @ConditionalOnBean(LoadBalancerClient.class) @EnableConfigurationProperties(LoadBalancerRetryProperties.class) public class LoadBalancerAutoConfiguration { ... ...
2.查看 LoadBalancerAutoConfiguration 里面的内容
- 注⼊
RestTemplate
对象到集合待⽤
- 注⼊
RestTemplate
定制器:给传入的RestTemplate
对象添加拦截器
- 使⽤定制器给集合中的每⼀个
RestTemplate
对象添加⼀个拦截器