java动态代理基本实现案例
Common.java:public interface Common {
public void action();
}
MyProxyed.java:
/**
* 被代理类
* @author Administrator
*
*/
public class MyProxyed implements Common{
public MyProxyed(){
}
@Override
public void action() {
// TODO Auto-generated method stub
System.out.println("我是被代理类,别忘了我。。。。");
}
}
ProxyClass.java:
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class ProxyClass implements InvocationHandler {
Object obj;
/**
* 用于生成代理类
* @param obj被代理类对象
* @return 一个代理类
*/
public Object blind(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 {
// TODO Auto-generated method stub
Object returnVal=arg1.invoke(obj, arg2);
System.out.println("我是代理类");
return returnVal;
}
}
Test.java:
/**
* 一个动态代理的例子
* @author Administrator
*被代理类和代理类有共同的方法,代理类调用方法时,其是实质是调用了InvocationHandler中的invoke方法
*/
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
MyProxyed proxyed=new MyProxyed();
ProxyClass proxy=new ProxyClass();
//这个是真正的代理类
Object obj=proxy.blind(proxyed);
Common common=(Common)obj;
common.action();
}
}
页:
[1]