标签:
动态代理是GOF二十三种设计模式之一,数据库连接和事务管理,spring中aop的方法拦截,以及单元测试时用到的mock对象等都用到了动态代理。
利用jdk自带的类java.lang.reflect.Proxy可以实现java的动态代理。
通过使用Proxy.newProxyInstance()方法创建动态代理。
newProxyInstance()方法有三个参数:
1、ClassLoader
2、需要代理的接口
3、InvocationHandler接口的实现
InvocationHandler handler = new MyInvocationHandler(); MyInterface proxy = (MyInterface) Proxy.newProxyInstance( MyInterface.class.getClassLoader(), new Class[] { MyInterface.class }, handler);
我们来看看InvocationHandler接口的定义
public interface InvocationHandler{ Object invoke(Object proxy, Method method, Object[] args) throws Throwable; }
所有对动态代理对象proxy的方法调用都会转到InvocationHandler接口的实现类上。
InvocationHandler接口只有一个invoke方法,invoke方法中的proxy参数就是动态代理对象,method对象则是被代理接口中的方法,args参数则是该method的方法参数。
标签:
原文地址:http://www.cnblogs.com/imars/p/5456787.html