標籤:row 方法 throwable getc als instance test rri throw
import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;//動態代理的使用interface Subject { void action();}// 被代理類class RealSubject implements Subject { @Override public void action() { System.out.println("我是被代理類,我一定要被執行!"); }}// 代理類class MyInvocationHandler implements InvocationHandler { Object object; // 實現了介面的被代理類的對象的聲明 // ①給被代理的對象執行個體化②返回一個代理類的對象 public Object blind(Object obj) { this.object = obj; return Proxy.newProxyInstance(object.getClass().getClassLoader(), object.getClass().getInterfaces(), this); } //當通過代理類的對象發起對重寫的方法的調用時,都會轉為對如下的invoke方法的調用 @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { //method方法的傳回值是returnVal Object returnVal = method.invoke(object, args); return returnVal; }}public class TestProxy { public static void main(String[] args) { //1.被代理的對象 RealSubject real = new RealSubject(); //2.建立一個實現了InvocationHandler介面類的對象 MyInvocationHandler handler =new MyInvocationHandler(); //3.調用blind()方法,動態返回一個同樣實現了real所在類實現的介面Subject的代理類的對象 Object obj = handler.blind(real); Subject sub = (Subject)obj; //此時sub就是代理類的對象 sub.action();//轉到對InvacationHandler介面的實作類別的invoke()方法的調用 }}
java動態代理