文档章节

java设计模式——代理模式

MYangM
 MYangM
发布于 2017/05/08 16:56
字数 215
阅读 0
收藏 0

动态代理底层是通过反射实现的。

主要用来做方法的增强,让你可以在不修改源码的情况下,增强一些方法,在方法执行前后做任何你想做的事情(甚至根本不去执行这个方法),因为在InvocationHandler的invoke方法中,你可以直接获取正在调用方法对应的Method对象,具体应用的话,比如可以添加调用日志,做事务控制等。

动态代理实现:

public interface ProxTest {
   void sayHello();
}
public class ProxTestImpl implements ProxTest {
   @Override
   public void sayHello() {
      System.out.println("aaaaaaaaaaaaaaa");
   }
}
public class ProxHandle implements InvocationHandler{

   private  Object obj;
   public ProxHandle(Object obj){
      this.obj  = obj;
   }

   @Override
   public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
      return method.invoke(obj,args);
   }
}
public class Main {

    public static void main(String[] args) throws CloneNotSupportedException, IOException, ClassNotFoundException {

            ProxTest proxTest = new ProxTestImpl();
            ProxHandle handler =  new ProxHandle(proxTest);
            ProxTest test = (ProxTest) Proxy.newProxyInstance(proxTest.getClass().getClassLoader(),proxTest.getClass().getInterfaces(),handler);
            test.sayHello();
    }
}

© 著作权归作者所有

MYangM
粉丝 0
博文 39
码字总数 1656
作品 0
闵行
私信 提问