ClassLoader classLoader = targetObject.getClass().getClassLoader(); Class<?>[] interfaces = targetObject.getClass().getInterfaces(); DynamicType.Unloaded<?> dynamicType = new ByteBuddy() .subclass(targetObject.getClass()) .implement(interfaces) .method(any()) .intercept(MethodDelegation.to(targetObject)) .make(); Class<? extends MyClass> proxyClass = dynamicType.load(classLoader) .getLoaded(); Instrumentation instrumentation = ByteBuddyAgent.install(); instrumentation.addTransformer( (loader, className, classBeingRedefined, protectionDomain, classfileBuffer) -> { if (className.equals(targetClassName)) { return dynamicTypeBytes; } return null; } ); instrumentation.retransformClasses(targetClass); public class MyInterceptor { @RuntimeType public static Object intercept(@Origin Method method, @SuperCall Callable<?> callable) throws Exception { System.out.println("Before method call"); try { return callable.call(); } finally { System.out.println("After method call"); } } }


上一篇:
下一篇:
切换中文