摘要: 1. 简介 在上一篇文章中,我比较详细的分析了获取 bean 的方法,也就是getBean(String)的实现逻辑。对于已实例化好的单例 bean,getBean(String) 方法并不会再一次去创建,而是从缓存中获取。如果某个 bean 还未实例化,这个时候就无法命中缓存。此时,就要根据 be 阅读全文
posted @ 2020-03-26 20:40 windy杨树 阅读(395) 评论(0) 推荐(0) 编辑
摘要: 1. 简介 为了写 Spring IOC 容器源码分析系列的文章,我特地写了一篇 Spring IOC 容器的导读文章。在导读一文中,我介绍了 Spring 的一些特性以及阅读 Spring 源码的一些建议。在做完必要的准备工作后,从本文开始,正式开始进入源码分析的阶段。 在本篇文章中,我将会详细分 阅读全文
posted @ 2020-03-26 19:41 windy杨树 阅读(330) 评论(0) 推荐(0) 编辑
摘要: 1. 简介 Spring 是一个轻量级的企业级应用开发框架,于 2004 年由 Rod Johnson 发布了 1.0 版本。经过十几年的迭代,现在的 Spring 框架已经非常成熟了。Spring 包含了众多模块,包括但不限于 Core、Bean、Context、AOP 和 Web 等。在今天,我 阅读全文
posted @ 2020-03-26 19:40 windy杨树 阅读(175) 评论(0) 推荐(0) 编辑
摘要: Spring 是一个轻量级的 J2EE 开源框架,其目标是降低企业级应用开发难度,提高企业级应用开发效率。在日程开发中,我们会经常使用 Spring 框架去构建应用。所以作为一个经常使用的框架,了解其原理还是很有必要的。接下来我们就从宏观层面上,来看看 Spring 中的 bean 由实例化到销毁的 阅读全文
posted @ 2020-03-26 19:27 windy杨树 阅读(164) 评论(0) 推荐(0) 编辑
摘要: 1. 背景 本文承接上文,来继续说说 IOC 和 AOP 的仿写。在上文中,我实现了一个很简单的 IOC 和 AOP 容器。上文实现的 IOC 和 AOP 功能很单一,且 IOC 和 AOP 两个模块没有整合到一起。IOC 在加载 bean 过程中,AOP 不能对 bean 织入通知。在本文中,我们 阅读全文
posted @ 2020-03-26 19:26 windy杨树 阅读(259) 评论(0) 推荐(0) 编辑
摘要: 1. 背景 我在大四实习的时候开始接触 J2EE 方面的开发工作,也是在同时期接触并学习 Spring 框架,到现在也有快有两年的时间了。不过之前没有仿写过 Spring IOC 和 AOP,只是宏观上对 Spring IOC 和 AOP 原理有一定的认识。所以为了更进一步理解 Spring IOC 阅读全文
posted @ 2020-03-26 19:25 windy杨树 阅读(293) 评论(0) 推荐(0) 编辑
摘要: 1. 概述 Java 提供了一种对象序列化的机制,一个对象可以被表示为一个字节序列,该字节序列包括该对象的数据、有关对象的类型的信息和存储在对象中数据的类型。把对象转换为字节序列的过程称为对象的 序列化。 将序列化对象写入文件后,可以从文件中读取出来,并且对它进行反序列化,对象的类型信息、对象的数据 阅读全文
posted @ 2020-03-26 19:01 windy杨树 阅读(318) 评论(0) 推荐(0) 编辑
摘要: 1. Class 类 Class 是一个类,封装了当前对象所对应的类的信息,一个类中有属性,方法,构造器等。 对于每个类而言,JRE 都为其保留一个不变的 Class 类型的对象。一个 Class 对象包含了特定某个类的有关信息。 Class 对象只能由系统建立对象,一个类(而不是一个对象)在 Ja 阅读全文
posted @ 2020-03-26 18:46 windy杨树 阅读(262) 评论(0) 推荐(0) 编辑
摘要: 1. 概述 Java 泛型(generics)是 JDK 5 中引入的一个新特性,泛型提供了 编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。 泛型,即 参数化类型。将类型由原来的具体的类型(类似于方法的变量参数,该变量定义了具体的类型),也定义成参数形式(可以称之为类型形参),然 阅读全文
posted @ 2020-03-26 18:34 windy杨树 阅读(281) 评论(0) 推荐(0) 编辑
摘要: JDK 动态代理 代理模式是常用的 JAVA 设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等。代理类与委托类之间通常会存在关联关系,一个代理类的对象与一个委托类的对象关联,代理类的对象本身并不真正实现服务,而是通过调 阅读全文
posted @ 2020-03-26 14:50 windy杨树 阅读(253) 评论(0) 推荐(0) 编辑
摘要: 基础知识: 线程:https://www.cnblogs.com/youngao/p/12568580.html 并发基础:https://www.cnblogs.com/youngao/p/12558381.html CAS:https://www.cnblogs.com/youngao/p/12 阅读全文
posted @ 2020-03-26 14:10 windy杨树 阅读(203) 评论(0) 推荐(0) 编辑
摘要: 1. 简介 阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。 两个附加的操作。 支持阻塞的 插入 方法,在队列为空时,获取元素的线程会等待队列变为非空。 支持阻塞的 移除 方法,当队列满时,存储元素的线程会等待队列可用。 阻塞队列常用于生产者和消费者的场景,生产者是往队列里添加元 阅读全文
posted @ 2020-03-26 13:56 windy杨树 阅读(773) 评论(0) 推荐(0) 编辑
摘要: 1. 简介 Exchanger(交换者)是自 JDK 1.5 起开始提供的工具套件,源于 java.util.concurrent 包。 是一个用于线程间协作的工具类。 Exchanger 用于进行线程间的数据交换。它提供一个同步点,在这个同步点两个线程可以交换彼此的数据。 此类提供对外的操作是同步 阅读全文
posted @ 2020-03-26 13:40 windy杨树 阅读(184) 评论(0) 推荐(0) 编辑
摘要: 1. 简介 Semaphore 类是一个计数信号量,必须由获取它的线程释放, 通常用于限制可以访问某些资源(物理或逻辑的)线程数目。 一个信号量有且仅有 3 种操作,且它们全部是原子的。 初始化、增加和减少。 增加可以为一个进程解除阻塞。 减少可以让一个进程进入阻塞。 Semaphore 管理一系列 阅读全文
posted @ 2020-03-26 13:38 windy杨树 阅读(485) 评论(0) 推荐(0) 编辑
摘要: 1. ConcurrentLinkedQueue 在并发编程中有时候需要使用线程安全的队列,线程安全队列有两种实现方式。 阻塞方式:对入队和出队操作加锁,阻塞队列。 非阻塞方式:通过自旋 CAS 实现,例如:ConcurrentLinkedQueue。 在中等规模的并发场景下,ConcurrentL 阅读全文
posted @ 2020-03-26 13:36 windy杨树 阅读(614) 评论(0) 推荐(0) 编辑
摘要: 1. ConcurrentHashMap 1.1 HaspMap(JDK 1.8) JDK 1.8 HashMap JDK 1.8 对 HashMap 进行了修改,最大的不同就是利用了红黑树,其由数组+链表+红黑树组成。 JDK 1.7 中,查找元素时,根据 hash 值能够快速定位到数组的具体下标 阅读全文
posted @ 2020-03-26 13:33 windy杨树 阅读(220) 评论(0) 推荐(0) 编辑
摘要: 1. ConcurrentHashMap ConcurrentHashMap 是线程安全且高效的 HashMap。 多线程环境下,使用 HashMap 进行 put 操作会引起死循环,如下例,导致 CPU 利用率接近 100%,所以在并发情况下不能使用 HashMap。 public static 阅读全文
posted @ 2020-03-26 13:32 windy杨树 阅读(263) 评论(0) 推荐(0) 编辑
摘要: 1. ReentrantReadWriteLock 概述 ReentrantReadWriteLock 是 Lock 的另一种实现方式,ReentrantLock 是一个排他锁,同一时间只允许一个线程访问,而 ReentrantReadWriteLock 允许多个读线程同时访问,但不允许写线程和读线 阅读全文
posted @ 2020-03-26 13:06 windy杨树 阅读(210) 评论(0) 推荐(0) 编辑
摘要: 1. LockSupport LockSupport 是用来创建锁和其他同步类的基本线程阻塞原语。 是一个简单的代理类,里面的代码都是使用 Unsafe 类里面的方法。 JDK 对 LockSupport 的描述:Basic thread blocking primitives for creati 阅读全文
posted @ 2020-03-26 11:51 windy杨树 阅读(207) 评论(0) 推荐(0) 编辑
摘要: 锁是用来控制多个线程访问共享资源的方式。 Java 程序可以使用 syschronized 关键字实现锁功能,而 Java 5 之后,在并发包中新增了 Lock 接口(以及相关实现类)用来实现锁功能。 Lock 提供了与 syschronized 关键字类似的同步功能,只是在使用时需要 显式地获取和 阅读全文
posted @ 2020-03-26 11:50 windy杨树 阅读(206) 评论(0) 推荐(0) 编辑