http://www.cnblogs.com/luotaoyeah/p/3778183.html


JDK 动态代理的简单理解

动态代理

代理模式是 Java 中的常用设计模式,代理类通过调用被代理类的相关方法,提供预处理、过滤、事后处理等服务,动态代理及通过反射机制动态实现代理机制。JDK 中的 java.lang.reflect.Proxy 类可以用来实现动态代理。

首先,准备一个简单的接口和实现类

JDK 动态代理的简单理解_动态代理

1 /**2  * 接口 IHello.java3  */4 public interface IHello {5     void hello();6 }

JDK 动态代理的简单理解_动态代理

JDK 动态代理的简单理解_动态代理

1 /**2  * 实现类 Hello.java3  */4 public class Hello implements IHello {5     @Override6     public void hello() {7         System.out.println("我是Hello.");8     }9 }

JDK 动态代理的简单理解_动态代理

通过 Proxy 实现动态代理

JDK 动态代理的简单理解_动态代理

 1 import java.lang.reflect.InvocationHandler; 2 import java.lang.reflect.Method; 3 import java.lang.reflect.Proxy; 4  5 import org.junit.Test; 6  7 public class HelloTest { 8     @Test 9     public void testProxy() throws Exception {10         final IHello hello = new Hello();11 12         /*13          * proxyHello    : 代理主题角色,代理类的实例 
14          * IHello        : 抽象主题角色,代理类和被代理类都需要实现的接口,JDK中的动态代理必须针对接口15          * hello         : 真实主题角色,被代理类的实例16          */17         IHello proxyHello = (IHello) Proxy.newProxyInstance(Thread.currentThread().getContextClassLoader(),18                 new Class[] { IHello.class }, new InvocationHandler() {19 20                     /*21                      * @param proxy : 当前代理类的一个实例; 若在invoke()方法中调用proxy的非final方法,将造成无限循环调用.22                      */23                     @Override24                     public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {25 26                         // 前置的业务逻辑操作27                         System.out.println("---开始");28 29                         // 调用被代理类的方法,传入参数args,得到返回30                         Object object = method.invoke(hello, args);31 32                         // 后置的业务逻辑操作33                         System.out.println("---结束");34 35                         return object;36                     }37                 });38 39         proxyHello.hello();40     }41 }

JDK 动态代理的简单理解_动态代理

JDK 动态代理的简单理解_动态代理_07