java注解处理器之MapStruct

介绍 MapStruct是一个可以生成类型安全的,高性能的且无依赖的 JavaBean 映射代码的注解处理器,可以在编译期生成对应的mapping,既没有BeanUtils等工具使用反射的性能问题,又免去了自己写映射代码的繁琐。...

java11新特性简单介绍

本地变量类型推断 public class Client { public static void main(String[] args) { var name = "lisi"; System.out.p...

jdk实现动态代理

介绍 代理是一种设计模式,提供了对目标对象另外的访问方式,通过代理对象来访问目标对象,这样可以扩展目标对象的功能,对目标对象功能做控制。 类图如下 静态代理 定义一个目标对象和代理对象都需要实现的接口 /** *...

ASM实现动态代理

介绍 ASM是一个java字节码操纵和分析框架,它可以直接以二进制的形式修改class或动态生成class。官网 使用 接下来我们使用asm框架实现一个和JDK动态代理同样的功能。 引入maven依赖 <dep...

CGLIB实现动态代理

介绍 cglib是一个强大的,受欢迎的,高性能的代码生成类库,它的底层就是asm(字节码框架),可以用来动态修改class和创建class,Spring AOP实现动态代理的一种方式就是cglib,hibernate使用cglib对...

Javassist实现动态代理

介绍 Javassist 也是一个字节码框架,和其他字节码框架不同的是,它提供了两种层级的API,源层级和字节码层级,源层级不需要对字节码规则了解太多就可以操作。Hibernate的懒加载就使用到了Javassist。官网 使用...

ByteBuddy实现动态代理

介绍 ByteBuddy也是一个代码生成和操作的类库,可以在运行时动态创建和修改class,底层也是ASM库,相比于cglib,javassist,Bytebuddy在性能上具有优势,Hibernate的懒加载和mockito测试框...

Lambda表达式序列化

lambda表达式序列化后我们可以得到实现接口和实现方法的信息。 public class Client { public static void main(String[] args) { SerializedL...

Spring源码分析之AliasRegistry(1)

AliasRegistry顾名思义为别名注册表,就是存储别名的地方,首先看一下别名的使用 别名的使用 public class UserService { public void userList() { S...

Spring源码分析之AliasRegistry(2)

上一篇博客介绍了别名在spring中的简单使用,这篇来看一下AliasRegistry的具体实现。 别名管理器的具体实现 public interface AliasRegistry { /** * 对一个name...