java反射机制:代理类、动态代理类

13年前
代理类与委托类的关系:
        代理类与委托类具有相同的接口,但委托类是接口的真正实现者,代理类只是调用委托类的相关方法来提供特定的服务,代理类可以为委托类预处理信息、把信息传递给委托类处理并进行事后处理。
代理类分为静态代理类和动态代理类。
动态代理类是利用java的反射机制生成。利用java.lang.reflect.Proxy类和java.lang.reflect.InvocationHandler接口.
比如HelloService是代理类和委托类的共同接口,其中HelloServiceIml是委托类,则生成动态代理类的方法:
1、首先创建InvocationHandler接口实例:
    final HelloService helloService=new HelloServiceIml();
     InvocationHandler handler=new InvocationHandler(){
             public Object invoke(Object proxy,Method method,Object[] args) throws Exception{
                      //proxy是生成的动态代理实例,method是调用的方法,args是方法的参数值
                     return method.invoke(helloService,args);//调用委托类的方法进行处理返回结果
            }
    };
2、创建动态代理
    HelloService helloServiceProxy=(HelloService)Proxy.newProxyInstance(HelloService.class.getClassLoader(),
                                                                                                               new Class[]{HelloService.class},
                                                                                                                 handler);
 
Proxy生成动态代理的静态方法:
public static Object newProxyInstance(ClassLoader loader,Class<?>[] interfaces,InvocationHandler handler);
         参数loader指定动态代理类的类加载器,interfaces指定动态代理类需要实现的所有接口,handler指定
与动态代理关联的InvocationHandler对象。其中InvocationHandler是动态代理类方法调用的接口,最主要的就是前面所实现的invoke方法。