admin 发表于 2015-5-17 20:12

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]
查看完整版本: java动态代理基本实现案例