ByteBuddy是一个可以在运行时动态生成java class的类库。
Byte Buddy是一个字节码生成和操作库,用于在Java应用程序运行时创建和修改Java类,而无需编译器的帮助。除了Java类库附带的代码生成实用程序外,Byte Buddy还允许创建任意类,并且不限于实现用于创建运行时代理的接口。此外,Byte Buddy提供了一种方便的API,可以使用Java代理或在构建过程中手动更改类。
无需理解字节码指令,即可使用简单的 API 就能很容易操作字节码,控制类和方法。
已支持Java 11,库轻量,仅取决于Java字节代码解析器库ASM的访问者API,它本身不需要任何其他依赖项。
比起JDK动态代理、cglib、Javassist,Byte Buddy在性能上具有一定的优势。
使用方法
下面是一个最简单的例子:
Class<?> dynamicType = new ByteBuddy()
// 指定父类
.subclass(Object.class)
// 根据名称来匹配需要拦截的方法
.method(ElementMatchers.named("toString"))
// 拦截方法调用,返回固定值
.intercept(FixedValue.value("Hello World!"))
// 产生字节码
.make()
// 加载类
.load(getClass().getClassLoader())
// 获得Class对象
.getLoaded();
assertThat(dynamicType.newInstance().toString(), is("Hello World!"));
- 本地下载(推荐): 本地下载