/** * 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"; } }