源码
文章平均质量分 81
筏镜
这个作者很懒,什么都没留下…
展开
-
AOP源码解析
前言 我之前在看源码都是局限于其中一步、两步没有一个整体观,我们在看源码的时候如果能在一个整体观去看,很多时候有些内容就豁然开朗了。 介绍 我们先看一下,整改spring容器启动这个流程,其中AOP 就在 初始化Bean后面由BeanPostProccessor 进行后置处理将Bean替换为AOP的代理类进行操作。 如果我们认识到这一点那么我们就有两个需要重点关注: 第一个是关于BeanPostProccessor 实现类对容器的注入。 第二个是BeanPostProccessor 的实现类对Bean本身代原创 2021-06-17 14:56:01 · 1066 阅读 · 1 评论 -
spring源码框架解析
前言 我们很多时候在阅读源码之前对源码的大体结构没有一个认识,导致在看源码的时候迷失在各个代码的细节里。这篇文章试着介绍一下spring源码的大体框架。让我们能在框架里面进一步认识spring源码。 介绍 IOC 和AOP 的关系 说起spring源码我们都会想到AOP 和IOC ,IOC 实际上就是spring 构造一个容器,将各个bean 对象初始化到这个容器的过程。AOP 是IOC的构建容器中bean的一小步,这里主要介绍关于IOC构建容器和bean 中的过程。 实例化和初始化 在开始这个IOC 构原创 2021-06-10 15:36:12 · 405 阅读 · 0 评论 -
ReentrantLock源码分析
ReentrantLock基本结构 ReentrantLock中有3个内部类,这个三个内部类的关系为 FairSync 是公平锁的主要实现类,NonfairSync 是非公平锁的主要实现类,默认为非公平锁的实现。 非公平锁加锁过程 非公平锁的加锁方法,加锁默认为非公平锁 ReentrantLock reentrantLock = new ReentrantLock(); reentrantLock.lock(); 1、构造方法中没有任何参数的时候,sync 默认为非公平锁的实现。原创 2020-07-12 17:46:00 · 141 阅读 · 0 评论 -
ThreadLocal源码认识和理解
ThreadLocal是一个非常常用对象,线程的变量副本,每个线程隔离,但对具体如何实现线程隔离,这篇文章试着去了解一下。 hreadLocal代码演示 public class ThreadLocalDemo { private static ExecutorService executor = new ThreadPoolExecutor(5, 5, 10L, TimeUnit.SECONDS, new LinkedBlockingQueue&l原创 2020-05-30 18:11:50 · 272 阅读 · 0 评论 -
mybatis中Mapper接口的动态代理实现及仿照其例子实现接口动态注入生成实现类
我们在使用mybatis的时候,一般都只需写一个Mapper的接口类和xml文件。我们只知道接口是不能够实现功能的。这篇文章主要想通过对mybatis代码的理解,找出mybatis如何通过接口就实现对数据库的增删改查的。 一、mybatis源码理解 1、我这里将MapperScannerConfigurer 作为mybatis配置核心类,从这作为入口理解。 aware接口: 翻译过来是知道的,已感知的,意识到的,所以这些接口从字面意思应该是能感知到所有Aware前面的含义。 BeanNameAware的例原创 2020-05-17 16:09:21 · 1432 阅读 · 0 评论 -
Spring循环依赖(源码上分析)
一、spring bean 的创建 四个阶段 1、实例化 instantiation(createBeanInstance) 2、属性赋值 Populate (populateBean) 3、初始化 Initialization(initializeBean) 4、销毁 Destruction(ConfigurableApplicationContext#close()) 二、DefaultSin...原创 2020-05-05 23:08:41 · 221 阅读 · 0 评论 -
Spring Bean的生命周期(生命周期阶段和扩展点分开)
Spring 有一些常用扩展点,了解Spring Bean的生命周期,能够对spring宏观有一定的认识,这里尝试答一下。 Spring Bean的生命周期分为四个阶段。这里将spring Bean的四个阶段添加部分常用扩展点便于理解。 一、spring bean 四个阶段 1、实例化 instantiation(createBeanInstance) 2、属性赋值 Populate (popu...原创 2020-04-05 19:01:49 · 748 阅读 · 0 评论 -
hashmap 初始化大小合适
我在公司项目中发现有个地方有初始化hashmap的容量,发现有个地方 初始化70的容量。其实即使是初始70也会转化为2^n的容量,变成初始化为128。那么今天探究一下hashmap到底初始化多少容量比较合适。 hashmap为什么需要扩容呢? 在hashmap数组扩容之后,最消耗性能的点就出现了:原数组中的数据必须重新计算其在新数组中的位置,并放进去,这就是resize ...原创 2019-10-19 11:53:27 · 3534 阅读 · 0 评论