Spring Cloud 2.2.2 源码之十四Ribbon初始化一

初始化主要结构图

在这里插入图片描述

LoadBalancerAutoConfiguration

还是自动配置的约定,里面有个LoadBalancerAutoConfiguration类。
在这里插入图片描述

注入RestTemplate实例集合

注入所有的RestTemplate实例,但是是有条件的,需要有LoadBalanced注解的,为什么突然有这个要求,我们后面讲。
在这里插入图片描述

LoadBalancerInterceptor拦截器

实现负载均衡,用的是拦截器,在请求之前把服务名根据负载均衡算法替换成相应的服务实例地址,然后就去请求。
在这里插入图片描述

LoadBalancerRequestFactory请求工厂

LoadBalancerRequestFactory,用来拦截后重新创建请求。
在这里插入图片描述

RestTemplateCustomizer定制化器

LoadBalancerInterceptor放入RestTemplate中的拦截器里。
在这里插入图片描述

SmartInitializingSingleton触发定制化

上面说了有定制化器,那什么时候进行定制化呢,就是这个时候。
在这里插入图片描述
这个是接口,实现了afterSingletonsInstantiated,会在所有单例bean实例化后进行调用。
在这里插入图片描述
DefaultListableBeanFactorypreInstantiateSingletons的最后调用:
在这里插入图片描述

ObjectProvider

这个其实也是一个注入点,你可以要任何类型的对象,只要他能给你注入,原理就是在DefaultListableBeanFactoryresolveDependency,直接给你创建一个DependencyObjectProvider对象返回了,你在要使用他的时候调用getIfAvailable,他相当于进行getBean处理了,因此他可以获取容器里所有的RestTemplateCustomizer实例:
在这里插入图片描述

RibbonAutoConfiguration

这里有两个比较重要的一个是SpringClientFactory,可以创建各种和负载均衡相关的对象,还有一个是RibbonLoadBalancerClient,做具体的负载均衡算法选择和调用。
在这里插入图片描述
还有默认的负载均衡器ZoneAwareLoadBalancer
在这里插入图片描述

LoadBalanced注解

初始化大致的几个重要的对象都将了,但是这里有个问题,我们来看看这个注解,里面比一般的多了一个Qualifier注解,就是这个注解给要注入的对象限制了条件,必须要有LoadBalanced注解,否则不能注入。
在这里插入图片描述
这个就使得我们必须在注入的时候加LoadBalanced注解,否则配置类的RestTemplate集合是拿不到的:
在这里插入图片描述

那这个的原理是什么呢,其实就是属性注入的时候有会去判断注解上有没有Qualifier限定修饰,如果有的话,那注入的工厂方法上也应该有这个限定符,否则不给注入。具体可以看相关文章分析。

好了,今天就到这里了,希望对学习理解有帮助,大神看见勿喷,仅为自己的学习理解,能力有限,请多包涵。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值