/**
* subclass:对应 ByteBuddy.subclass() 方法。这种方式比较好理解,就是为目标类(即被增强的类)生成一个子类,在子类方法中插入动态代码。
* 通过一个示例展示 Byte Buddy 如何增强 log() 方法
*/
public class TestByteBuddy {
public static void main(String[] args) throws IllegalAccessException, InstantiationException {
// 创建ByteBuddy对象
String str = new ByteBuddy()
// subclass增强方式
.subclass(AAA.class)
// 新类型的类名
.name("com.xxx.Type")
// 拦截其中的toString()方法
.method(ElementMatchers.named("log"))
// log()方法返回固定值
.intercept(FixedValue.value("Hello World!"))
.make()
// 加载新类型,默认WRAPPER策略
//WRAPPER 策略:创建一个新的 ClassLoader 来加载动态生成的类型。
.load(TestByteBuddy.class.getClassLoader())
.getLoaded()
// 通过 Java反射创建 com.xxx.Type实例
.newInstance()
// 调用 log()方法
.log();
System.out.println(str);
}
}
public class AAA {
public String log(){
System.out.println("测试ByteBuddy");
return "返回ByteBuddy";
}
}