通过示例展示Byte Buddy 如何增强 log() 方法

/**
 * 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";
    }
}
原文地址:https://www.cnblogs.com/wueryuan/p/14229733.html