设计模式之职责链模式

定义 使每个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求, 直到有一个对象处理它为止。如公司员工请假,可以批假的领导有部门负责人、副总经理、总经理等,但每个领导可以批...

java冷知识之Method的isBridge()桥接方法和isSynthetic()合成方法

桥接方法 定义 在源方法和目标方法之间创建一个中间层,通常作为泛型的类型擦除过程的一部分。 第一个例子 public class Person implements Comparable<Person> {...

设计模式之桥接模式

定义 将抽象部分和它的实现部分分离,使它们都可以独立地变化。在现实生活中,某些类有两个或多个维度的变化, 如图形既可以按形状分,又可以按颜色分,如何画不同形状不同颜色的图形呢,如果用继承方式,m 种形状 n 种颜色的图形就有 m *...

设计模式之访问者模式

定义 表示一个作用于某对象结构中的各元素的操作,它使得可以在不改变各元素的类的前提下定义作用于这些元素的新操作。 结构 Visitor,访问者接口,每个具体元素类对应一个访问操作,参数类型标识了被访问的具体元素...

IDEA对jsr305的Nonnull注解和Guava的Beta注解的支持

前言 jsr305是一个规范,具体来说是一套用来给代码分析工具(如IDEA)检查代码缺陷用的注解,类似jsr303(Bean Validation规范)。今天在学习Spring源码时,发现其中使用到了jsr305中的注解。...

Spring中表达式语言spring-expression简单使用

前言 Spring Expression Language(简称 SpEL)是一个支持查询和操作运行时对象导航图功能的强大的表达式语言, 它的语法类似于传统 EL(如jsp中的EL表达式),但提供额外的功能,最出色的就是函数调用和简...

java中如何通过程序检测线程死锁

死锁定义 线程死锁描述的是这样一种情况:多个线程同时被阻塞,它们中的一个或者全部都在等待某个资源被释放。 由于线程被无限期地阻塞,因此程序不可能正常终止。如下图所示,线程 A 持有资源 2,线程 B 持有资源 1, 它们同时都想申请...

java中Lambda表达式的实现原理

简单使用 import java.util.function.Consumer; public class TestLambda { public static void main(String[] args) {...

java魔法类之Unsafe介绍

前言 Unsafe类位于sun.misc包下,它是java实现高并发的基础,通过它可以执行一些不安全的操作,如像C语言一样直接操作内存资源, 它提供的这些方法增强了java对底层资源的操作能力,但同时也增加了程序出错的风险,所以对它...

java魔法类之ReflectionFactory介绍

前言 在看objenesis(一个提供多种实例化对象的方式的库)的源码时,发现其中使用到了ReflectionFactory类,通过它可以绕过构造器来实例化对象。 简单使用 定义一个包含有参构造器的类 public cl...