背景 正常情况下 Java 的反射是可以获取到普通的泛型类型的,例如假设存在基类 此时直接执行 可以拿到类型为 ParameterizedType 的 java.util.List<java.lang.String> 对象 但特殊情况下,例如子类 此时查询 S
阅读全文标签: JDK
Java 基于 ByteBuddy 重写系统当前时间
背景 一般单元测试时总会有些代码会严重依赖系统当前时间,这种情况下的测试代码写起来可能就比较费劲,此处分享一种基于 ByteBuddy 的覆盖 System.currentTimeMillis 的解决方案。 添加依赖 ByteBuddy 是啥以及作用
阅读全文JSR269 编译期处理常用操作
基础变量 后面有些凭空出现的变量可以从这找类型和获取方式: 添加导入包 后面无论加接口还是加注解,都需要先导包: 类添加接口声明 类添加继承序列化接口等操作 类添加注解 类声明的前面添加 @Service @Compoent
阅读全文从头开始一个 JSR269 工程
修改 pom.xml 添加依赖 sun.tools: 处理资源文件,跳过执行自定义 processor : 新建一个编译时注解 这个注解就是对外的注解,后续引用该包的源码上带该注解的都会被处理: 新建处理类 编译时的执行类,可以在这里
阅读全文关于 MetaSpace 及 FastJSON 导致的 OOM
在 JDK8 之前,虚拟机内存主要分为堆和非堆两部分,堆中划分新生代老生代,非堆中包含所有非对象信息和运行时信息,其中有一块叫 PermGen,用以保存字节码等类信息。在 JDK8 中取消了这块内存,并添加了 MetaSpace 替代所有功能。
阅读全文基于 ByteBuddy 运行时动态修改字节码
简介 Byte Buddy 是一个字节码生成与操作库。它无需编译器,能够在Java程序运行时创建与修改 class 文件。 目标 已有类文件: 目标是将所有 Log 类中对 log 方法的调用全转到 log4j 上。 准备 修改 pom.xml 添加依赖
阅读全文JVM 类加载器应用之多版本库支持
问题 开发过程中,咱们经常需要使用不同的库版本,而这些版本又不是向后兼容的,或者出于某种原因需要支持同一库的多个版本。 在这种情况下,默认的类加载器已经是不支持了,因为 loadClass 方法只加载一次特定的类
阅读全文SNI 兼容性导致 HTTPS 访问异常
直接贴日志吧,发现有台机器访问 https 就会有以下异常: 提示域名证书不匹配,其实这个是 SIN 导致的,先大体说一下 SNI 是什么。 随着 IPv4 地址的短缺,为了让多个域名复用一个 IP 地址,在 HTTP 服务器上引入了
阅读全文关于 java.lang.ArrayStoreException: sun.reflect.annotation.TypeNotPresentExceptionProxy
Java SE5扩展了反射机制的API,Class 中出现了 getAnnotation(Class<a> annotationClass) 方法,该方法可以帮助程序员快速的构造自定义注解处理器。文档中对该方法的注释为: 返回改程序元素上存在的、指定类型
阅读全文