源码分析
文章平均质量分 93
源代码分析
编号94530
新时代 积极 向上 奋斗 好 青年
展开
-
(WebFlux)003、多数据源R2dbc事务失效分析
在使用新东西的时候,还是要多实验,验证结果!遇到问题,不要慌,一步步来,就是干!如有问题,欢迎指正,交流。原创 2022-08-27 20:48:45 · 1671 阅读 · 2 评论 -
Spring是如何自动注入多类型
抓住10月月末的小尾巴, 一探SpringBean内部字段是如何注入多类型的时常有个小问题围绕着我,Spring是如何给字段字符装盘,为何支持Collection、List、Map、String等这么多类型的呢?在Spring注入的过程中,有没有什么小技巧值得我们学习呢?带着这个疑惑,我们来一探究竟。本文基于SpringBoot V2.5.6, Spring V5.3.12。不同版本可能会有不同,请注意哈想要弄懂上面的问题,有一个小小的要求,那就是要弄懂SpringBean的生命周期(如和Get原创 2021-10-31 21:12:45 · 284 阅读 · 1 评论 -
RestTemplate打印日志的正确姿势
背景现在随着微服务的逐渐发展,越来越多的公司开始采用微服务架构,但随之而来的问题是,服务间如何调用,如何还能负载均衡,还必须开箱即用?答案就是Spring的RestTemplate啦(并不一定要使用RestTemplate,也不一定要是微服务架构,涉及到Http调用的服务,方式都可以,我这个是为了引出主题),但伴随而来的是一个问题,如何打印好日志,留下现场(防止扯皮),这才是我们关心的。这也是我们这篇文章的主题-RestTemplate打印日志的正确姿势。好了,不凑字数了,接下来进入正文。1. 老实人干原创 2021-06-22 20:15:08 · 3265 阅读 · 4 评论 -
Nacos如何实现服务自动注册
1. 背景接着上次的说,Nacos问题的分析。这次就来分享一下自己的分析方法。以及如何利用Spring事件完成服务注册。2. 分析一下2.1 问题分析过程问题是这样的,我以为是Nacos服务注册不上吗? 那就肯定是注册有问题了, 那就去找是服务是如何注册的。关键是从哪找呢?具体步骤:知道服务启动方式。如Nacos,就是通过properties,那就找哪有用到启动的属性文件项目用SpringBoot集成,那核心类的加载就在Spring.factories中。(这个文件会被springSPI加载原创 2020-09-19 22:52:56 · 3130 阅读 · 0 评论 -
Spring事件执行流程源码分析
1. 背景为啥突然想到写这个?起因就是看到了Nacos的#3757 ISSUE,理解错误, 以为是服务启动,没有注册上服务,实际namespace不同,导致服务无法注册。 但这丝毫不影响再去研究了一波代码,顺便也看到了Nacos是如何利用Spring的事件来进行服务注册的。分享一波,欢迎大家学习指正!2. 娓娓道来 - Spring事件2.1 怎么发布事件我们大家应该都知道,在Spring中,是通过实现org.springframework.context.ApplicationEventPubli原创 2020-09-13 22:35:06 · 143 阅读 · 0 评论 -
CompletableFuture运行流程源码详解
1. 背景CompletableFuture用起来着实舒服,代码一写,异步跑起来,时间缩短了不少(一个IO任务单线程40多分钟,用上多线程CompletableFuture,直接变成7分钟了)。代码是用起来了, 很舒服,但是里面的原理,想必有些大兄弟还不怎么清楚。今天就来一步步分析一下运行流程。2. 上代码CompletableFuture可以通过构造函数或者提供的方法构造一个CompletableFuture对象。我们今天就以CompletableFuture#supplyAsync方法来讲解。直接原创 2020-07-29 14:38:19 · 571 阅读 · 0 评论 -
Mybatis 缓存 源码分析
文章目录1. 结论2. Show code2.1 SimpleExecutor2.2 CacheExecutor3 细说1. 结论老规矩,先说结论。给各位大兄弟来点总结。mybatis有两级缓存,分别是:SqlSession级别Mapper级别想必大家都对这个结论不陌生,但是有许多人其实并不明白具体原因。所以今天就和各位大兄弟一起来探讨一下具体代码。2. Show code这个缓存就得从创建执行器开始,org.apache.ibatis.session.Configuration#new原创 2020-07-05 14:26:44 · 168 阅读 · 0 评论 -
SPI简要分析
一、背景介绍 在看spring源码和dubbo源码的时候,发现两者都用采用了JDK中spi的技术,发现都有大作用,所以就来分析下JDK中的SPI的使用方式及源码实现。二、什么是SPI SPI的全称是 Service Provider Interface。 一种从特定路径下,将实现了某些特定接口的类加载到内存中的方式(为什么会如此说,请看后面分析)。提供了另外一种方式加载实现类,也降...原创 2020-03-26 23:25:46 · 203 阅读 · 0 评论 -
ReentrantReadWriteLock之读写锁判断
一. 读写锁是怎么实现的? 继承AQS,然后通过将AQS中的state转化为二进制,分为高16位和低16位来区分。高16位表示读状态,低16位为写状态。二. 解析表示方式(高低16位) 假设此时state是数值S a.写锁 在判断写锁时,通过 K=S&0X0000FFFF, 将高位全部抹掉,此时只有低16位,然后判断K是否大于0,K>0,表示有写锁,反...原创 2019-09-30 21:07:20 · 273 阅读 · 0 评论 -
多线程分析之Semaphore
Semaphore分析由来 网上看了许多讲解Semaphore的,用Semaphore来实现顺序打印字母,但是可能大家都没有清楚具体的原因,所以来给大家分析下为什么可以使用Semaphore来实现顺序打印字母顺序。Semaphore源码分析 先打开JDK8源码中的Semaphore,可以看到Semaphore是通过继承AQS来现实功能(AQS,Doug Lea大神重写并发包的核心,...原创 2019-06-30 17:40:40 · 136 阅读 · 0 评论 -
HashMap1.8之节点删除分析
HashMap之节点删除 大家一直关注的都是HashMap如何添加节点,当节点数量大于8的时候转化为红黑树,否则使用链表等等,但大家是否有看过删除节点的处理逻辑呢? 今天来看看HashMap删除节点的神来之笔问题来源 在查看HashMap源码时,有个以下字段,在删除的时候,判断节点数量,最多在小于6的时候,会untreeifying(树转化为链表),在点击这个字段时发现,只有...原创 2019-06-16 21:44:16 · 863 阅读 · 3 评论