Java之动态代理

动态代理是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的方法参数。

 

posted @ 2016-05-03 22:37  imars  阅读(176)  评论(0)    收藏  举报