2023-09-15  阅读(2)
原文作者:王伟王胖胖 原文地址: https://blog.csdn.net/wangwei19871103/article/details/105632945

初始化主要结构图

202309152312586751.png

LoadBalancerAutoConfiguration

还是自动配置的约定,里面有个LoadBalancerAutoConfiguration类。

202309152312594792.png

注入RestTemplate实例集合

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

202309152313004243.png

LoadBalancerInterceptor拦截器

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

202309152313010114.png

LoadBalancerRequestFactory请求工厂

LoadBalancerRequestFactory,用来拦截后重新创建请求。

202309152313016545.png

RestTemplateCustomizer定制化器

LoadBalancerInterceptor放入RestTemplate中的拦截器里。

202309152313023576.png

SmartInitializingSingleton触发定制化

上面说了有定制化器,那什么时候进行定制化呢,就是这个时候。

202309152313029677.png
这个是接口,实现了afterSingletonsInstantiated,会在所有单例bean实例化后进行调用。

202309152313036278.png
DefaultListableBeanFactorypreInstantiateSingletons的最后调用:

202309152313043949.png

ObjectProvider

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

2023091523130511910.png

RibbonAutoConfiguration

这里有两个比较重要的一个是SpringClientFactory,可以创建各种和负载均衡相关的对象,还有一个是RibbonLoadBalancerClient,做具体的负载均衡算法选择和调用。

2023091523130585711.png
还有默认的负载均衡器ZoneAwareLoadBalancer

2023091523130657212.png

LoadBalanced注解

初始化大致的几个重要的对象都将了,但是这里有个问题,我们来看看这个注解,里面比一般的多了一个Qualifier注解,就是这个注解给要注入的对象限制了条件,必须要有LoadBalanced注解,否则不能注入。

2023091523130724713.png
这个就使得我们必须在注入的时候加LoadBalanced注解,否则配置类的RestTemplate集合是拿不到的:

2023091523130786414.png

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

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


Java 面试宝典是大明哥全力打造的 Java 精品面试题,它是一份靠谱、强大、详细、经典的 Java 后端面试宝典。它不仅仅只是一道道面试题,而是一套完整的 Java 知识体系,一套你 Java 知识点的扫盲贴。

它的内容包括:

  • 大厂真题:Java 面试宝典里面的题目都是最近几年的高频的大厂面试真题。
  • 原创内容:Java 面试宝典内容全部都是大明哥原创,内容全面且通俗易懂,回答部分可以直接作为面试回答内容。
  • 持续更新:一次购买,永久有效。大明哥会持续更新 3+ 年,累计更新 1000+,宝典会不断迭代更新,保证最新、最全面。
  • 覆盖全面:本宝典累计更新 1000+,从 Java 入门到 Java 架构的高频面试题,实现 360° 全覆盖。
  • 不止面试:内容包含面试题解析、内容详解、知识扩展,它不仅仅只是一份面试题,更是一套完整的 Java 知识体系。
  • 宝典详情:https://www.yuque.com/chenssy/sike-java/xvlo920axlp7sf4k
  • 宝典总览:https://www.yuque.com/chenssy/sike-java/yogsehzntzgp4ly1
  • 宝典进展:https://www.yuque.com/chenssy/sike-java/en9ned7loo47z5aw

目前 Java 面试宝典累计更新 400+ 道,总字数 42w+。大明哥还在持续更新中,下图是大明哥在 2024-12 月份的更新情况:

想了解详情的小伙伴,扫描下面二维码加大明哥微信【daming091】咨询

同时,大明哥也整理一套目前市面最常见的热点面试题。微信搜[大明哥聊 Java]或扫描下方二维码关注大明哥的原创公众号[大明哥聊 Java] ,回复【面试题】 即可免费领取。

阅读全文