首页 > 代码库 > 动态代理 例子
动态代理 例子
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);
}
}