您的位置:首页 > 其它

动态代理设计模式

2013-08-07 21:47 134 查看
     静态与动态的区别是在于编译时期还是运行时期。如何来运行时候来修改方法呢?动态代理是AOP的基础,动态代理,是生成一个与被代理对象具有相同的接口,并且修改方法生成的一个类。

     在Java中,代理类要实现InvocationHandler接口,它里面有一个重要的方法,就是invoke()方法。

     好了,看一个例子:

     public interface IFood {
          void show();

    }

    public class GuangdongFoodImp implements IFood{

@Override

public void show() {

        System.out.println("广东小吃");

}

   }

  public class DynamicProxy implements InvocationHandler {

private Object obj;

public DynamicProxy(Object obj){

this.obj=obj;

}

@Override

public Object invoke(Object proxy, Method method, Object[] args)

throws Throwable {

System.out.println("before call...");

method.invoke(obj, args);

return null;

}

  }

  public class Client {

public static void main(String[] args) {

 GuangdongFoodImp food=new GuangdongFoodImp();

          InvocationHandler in=new DynamicProxy(food);

          IFood proxyfood=(IFood)Proxy.newProxyInstance(food.getClass().getClassLoader(), food.getClass().getInterfaces(), in);

          proxyfood.show();

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: