【原创】Java动态代理总结

Proxy类的静态方法newProxyInstance(ClassLoader loader, Class<?>[] interfaces, InvocationHandler h) 创建代理对象。该方法的三个参数解释如下:

     1. loader:指定被代理类的ClassLoader。

     2. interfaces:指定被代理类所实现的接口。注意,该参数是一个Class类型的数组,所以支持多个接口。当interfaces中指定的任意接口的方法被调用时,调用将被拦截,然后转到第三个参数h的invoke方法中,执行相应的逻辑。

     3. h:指定一个InvocationHandler的实例。当第二个参数interfaces中指定的任意接口的方法被调用时,程序流程将转到此参数的invoke方法,执行相应的逻辑。

 

生成的代理对象的真实类型为Proxy,但是实现了被代理类所实现的所有接口(其实应该是newInstance方法中第二个参数interfaces所指定的接口,不过大部分情况下该参数都被直接指定为被代理类实现的所有接口),所以可以通过强制转换,来调用被代理类实现的所有接口中的所有方法。

具体程序实例参见DynamicProxyTestDemo项目。

posted @ 2011-03-31 12:20  弱水流觞  阅读(255)  评论(0编辑  收藏  举报