標籤:java io re c ar new
package xinhuiji_day09
**********************************定義代理類**********************************************
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
//動態代理
public class MyInvocationHandler implements InvocationHandler {
private Object obj = null; //真實主題
public Object Bind(Object obj){ //綁定真是操作主題
this.obj = obj;
return Proxy.newProxyInstance(obj.getClass().getClassLoader(),
obj.getClass().getInterfaces(), this); //取得代理對象
}
@Override
public Object invoke(Object arg0, Method arg1, Object[] arg2)
throws Throwable { //動態調用方法
Object temp = arg1.invoke(this.obj, arg2); //調用方法,傳入真實主題和參數
return temp; //返回方法的返回資訊
}
}
/*
在MyInvocationHandler類的Bind方法中接受被代理的對象的真是主題實現,之後覆寫InvocationHandler介面的invoke方法
完成具體的方法調用
* */
********************************定義介面**************************************
package xinhuiji_day09;
public interface Subject {
String say(String name,int age);
}
******************************定義真實主題實作類別************************************
package xinhuiji_day09;
public class RealSubject implements Subject{
@Override
public String say(String name, int age) {
return "姓名: "+name+" 年齡: "+age;
}
}
***********************測試*********************************
package xinhuiji_day09;
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
MyInvocationHandler my = new MyInvocationHandler();
Subject sub = (Subject) my.Bind(new RealSubject());
String info = sub.say("han", 23);
System.out.println(info);
}
}