<dependencies> <dependency> <groupId>org.javassist</groupId> <artifactId>javassist</artifactId> <version>3.27.0-GA</version> </dependency> </dependencies> public interface Foo { void bar(); void baz(); } import javassist.util.proxy.MethodHandler; import javassist.util.proxy.ProxyFactory; import javassist.util.proxy.ProxyObject; public class DynamicProxy implements MethodHandler { private Object target; public Object bind(Object target) { this.target = target; ProxyFactory factory = new ProxyFactory(); factory.setSuperclass(target.getClass()); Class<?> proxyClass = factory.createClass(); try { Object proxyObject = proxyClass.getDeclaredConstructor().newInstance(); ((ProxyObject) proxyObject).setHandler(this); return proxyObject; } catch (Exception e) { throw new RuntimeException("Error creating proxy object", e); } } @Override public Object invoke(Object self, Method thisMethod, Method proceed, Object[] args) throws Throwable { System.out.println("Before method invocation"); Object result = thisMethod.invoke(target, args); System.out.println("After method invocation"); return result; } } public class Main { public static void main(String[] args) { Foo foo = new DynamicProxy().bind(new FooImpl()); foo.bar(); foo.baz(); } } class FooImpl implements Foo { @Override public void bar() { System.out.println("Inside bar() method"); } @Override public void baz() { System.out.println("Inside baz() method"); } } Before method invocation Inside bar() method After method invocation Before method invocation Inside baz() method After method invocation


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