源码分析
文章平均质量分 86
源码学习笔记
技术无产者
心之所向,素履以往,生如逆旅,一苇以航!
展开
-
SpringBoot自动装配原理详细讲解(清楚 明白)
1.启动类上因为加上了 @EnableEurekaServer这个注解 才可以实现自动装配@SpringBootApplication@EnableEurekaServerpublic class EurekaApplication { public static void main(String[] args) { SpringApplication.run(EurekaApplication.class); }}2.自动装配的核心方法loadSpri.原创 2022-03-26 12:18:12 · 1212 阅读 · 1 评论 -
ReentrantLock源码分析
1.代码优化的设计非公平模式下:非公平锁的加锁流程,线程在进入同步队列等待之前有两次抢占锁的机会:第一次是非重入式的获取锁,只有在当前锁未被任何线程占有(包括自身)时才能成功; 第二次是在进入同步队列前,包含所有情况的获取锁的方式。只有这两次获取锁都失败后,线程才会构造结点并加入同步队列等待。有的博客说写两次获得锁的逻辑虽然减少了代码的简洁,但这种对非重入且虽然队列中有线程在等待获取锁,但是在等待的线程在获取锁之前,这个新来的线程提前去占据了锁,提高了性能,我觉得应该是新的线程避免执行原创 2022-03-06 17:20:21 · 279 阅读 · 0 评论 -
JDK动态代理源码
JDK动态代理[4]----ProxyGenerator生成代理类的字节码文件解析 - 差不多先生的个人空间 - OSCHINA - 中文开源技术交流社区通过前面几篇的分析,我们知道代理类是通过Proxy类的ProxyClassFactory工厂生成的,这个工厂类会去调用ProxyGenerator类的generateProxyClass()方法来生成代理类的字节码。ProxyGenerator这个类存放在sun.misc包下...https://my.oschina.net/xiaominmin/blog转载 2022-03-03 10:23:01 · 160 阅读 · 0 评论 -
Dubbo IOC AOP的实现
Dubbo在SPI机制中实现了IOC功能, Dubbo IOC的主干业务逻辑就是在injectExtension方法中,下面是对Dubbo IOC业务逻辑的梳理:1. Dubbo的IOC是怎么获取对象的: 当通过SPI机获取对象时,如果发现该类有set开头的方法,就会调用injectExtension方法,为其注入属性值, 被注入属性的对象有两类: 1>该类/接口上有@SPI注解,则会通过SpiExtensionFactory来获取对象,并进行注入,具体使用方式...原创 2022-02-22 19:27:25 · 594 阅读 · 0 评论 -
redis的多路复用和事件处理器使用的是同一个线程吗?
在学习IO模型的时候,不断纠结的地方是select/poll/epoll都是阻塞的,而redis又是单进程的,那么它是如何做到一边监听socket,一遍处理事件的,这一点问题网上的答案写的真是五花八门,难道真的是一个线程负责调用IO多路复用函数,然后将监听到的事件放在队列中,然后事件处理器去调用吗?先上结论: IO多路复用和处理事件确实是一个线程完成的,当redis没有关闭的时候外层一直在循环,循环的过程中监听到事件就进行处理,在没有事件时就会阻塞在wait, 当请求到来后就会唤醒线...原创 2022-01-27 20:13:01 · 1775 阅读 · 0 评论 -
分别用一二三级缓存解决循环依赖的方案
一. 一级缓存1.不考虑aop 使用—级缓存解决循环依赖1>创建A对象,放到缓存中,这时候为A对象注入属性 2>创建B放到缓存,从缓存中获得A对象,将B对象返回给A对象(这时候如果不考虑aop 一级缓存就可以解决循环依赖的问题了)2.考虑aop时,一级缓存无法解决循环依赖的问题 因为初始化操作必须放在aop代理之前, 否则导致初始化的时候无法改变代理对象的属性值(具体见动态代理对象属性注入的文章动态代理对象的属性注入_zyz的博客-CSD...原创 2022-01-19 20:29:36 · 1694 阅读 · 1 评论 -
动态代理对象的属性注入
下面会分别对Jdk和Cglib两种类型的动态代理的对象进行分析1.Cglib1> 直接通过反射创建代理对象 User user=new User("zyz",123); Enhancer enhancer = new Enhancer(); enhancer.setSuperclass(user.getClass()); enhancer.setInterfaces(user.getClass().getInterfaces());原创 2022-01-13 22:25:34 · 1317 阅读 · 0 评论 -
Spring源码分析 ---- BeanFactory接口的设计分析
在看spring这块源码的时候,苦苦思索却想不明白spring为何要把这块接口设计的这么复杂,下面是自己的一些思考,如果有误欢迎指正:一.接口的设计IOC是spring的核心功能,BeanFactory接口在设计的时候遵循了单一指针原则,接口按照功能进行划分,每一层实现特定的功能,下面介绍了每一层所负责的功能: (图片引自小博哥)1.BeanFactory:该层是最顶层的接口,仅仅提供了一些getBean的方法2.AbstractBean...原创 2021-12-13 21:09:33 · 604 阅读 · 0 评论 -
HashMap源码分析
JDK1.7和jdk1.8对于HashMap实现的异同总结:具体可以看这篇文章,但这篇文章几个地方存在歧义,下面做以补充:(1)美团面试题:Hashmap的结构,1.7和1.8有哪些区别,史上最深入的分析_王伟的博客-CSDN博客_hashmap1.7和1.8的区别(一) 真实面试题之:Hashmap的结构,1.7和1.8有哪些区别不同点:(1)JDK1.7用的是头插法,而JDK1.8及之后使用的都是尾插法,那么他们为什么要这样做呢?因为JDK1.7是用单链表进行的纵向延伸,当采用头插法就是能够..原创 2021-12-07 10:28:34 · 759 阅读 · 0 评论 -
HashMap源码学习
史上最详细的 JDK 1.8 HashMap 源码解析_程序员囧辉-CSDN博客_hashmap1.8可能是史上最详细的 HashMap 源码解析。https://blog.csdn.net/v123411739/article/details/78996181疫苗:Java HashMap的死循环 | 酷 壳 - CoolShellhttps://coolshell.cn/articles/9606.html什么?HashMap竟然也有懒加载?_小饭饭带你玩waigua的博客-CSDN博客不花时间的导读:原创 2021-12-03 20:52:42 · 107 阅读 · 0 评论 -
ArrayList源码分析
通过源码一步一步分析ArrayList 扩容机制_一眼过云烟-CSDN博客一 先从 ArrayList 的构造函数说起ArrayList有三种方式来初始化,构造方法源码如下: /** * 默认初始容量大小 */ private static final int DEFAULT_CAPACITY = 10; private static final Object[] DEFAULTCAPACITY_EMPTY_ELEME...https://blog.csdn.net/qq_38621334/article/原创 2021-12-02 12:04:06 · 233 阅读 · 0 评论