JDK動態代理是基於接口的代理,下面舉例說明ide
首先說明下InvocationHandler的invokethis
public interface InvocationHandler {
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable;
}
proxy:方法基於哪一個proxy實例來執行spa
method:執行proxy實例的哪一個方法(proxy代理誰就執行誰的方法)代理
args:methed的入參code
代碼示例:blog
public interface Say { void sayHello(String words); }
public class SayImpl implements Say { @Override public void sayHello(String words) { System.out.println("hello:" + words); } }
public class TestInvocationHandler implements InvocationHandler { private Object target; public TestInvocationHandler(Object target) { this.target=target; } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("invoke begin"); System.out.println("method :"+ method.getName()+" is invoked!"); method.invoke(target,args); System.out.println("invoke end"); return null; } }
public static void main(String[] args) { TestInvocationHandler testInvocationHandler = new TestInvocationHandler(new SayImpl()); Say say = (Say)Proxy.newProxyInstance(SayImpl.class.getClassLoader(), SayImpl.class.getInterfaces(), testInvocationHandler ); say.sayHello("my dear"); }
執行結果:接口
invoke begin
method :sayHello is invoked!
hello:my dear
invoke endget