当前位置: 代码迷 >> J2SE >> 关于jdk中的InvocationHandler中的invoke方法传入代理类实例的疑惑,该怎么解决
  详细解决方案

关于jdk中的InvocationHandler中的invoke方法传入代理类实例的疑惑,该怎么解决

热度:63   发布时间:2016-04-24 01:44:49.0
关于jdk中的InvocationHandler中的invoke方法传入代理类实例的疑惑
今天尝试反编译了下使用jdk中的Proxy.newInstance生成的动态代理类的代码。
有点小疑惑请教坛子里的高人。

使用jdk中的Proxy.newInstance生成动态代理类仅仅针对接口实现的,一般使用步骤:
Java code
// 1、定义接口class interface1{}class interface2{}class interface3{}// 2、创建接口的实现类//对应接口的实现类,被代理的对象class ImplClass implements interface1,inteface2,interface3{}// 3、创建具体的InvocationHandlerxxxHandler implements InvocationHandler{        private ImplClass implClass;        //注入ImplClass的实例        invoke(0bject Proxy,Method method,Object[] args){        //dosomething        method.inovke(implClass,args);    }}// 4、根据具体的接口和InvocationHandler生成代理类ImplClass proxy0 = (ImplClass)Proxy.newInstance(classLoader,interfaces,hanlder);// 5、调用代理的方法proxy0.doSomething();


查看了下动态生成的proxy0的反编译代码 
具体的doSomething中的方法体
Java code
//生成的proxy实例继承Proxy并实现被代理的各个接口class proxy0  extends Proxy implements interface1,inteface2,interface3{    //这个handler引用 4、创建代理时传如handler实例    private InvocationHandler handler        //实现各个interface中的方法    methodXX(object args){                // 调用传入的handler的invoke方法,传入代理类实例和具体的要调用的被代理方法以及参数        handler.invoke(this,methodXX,args);    }}


现在我的疑惑是:在InvocationHandler中的invoke方法中为什么需要传入Object proxy呢?
是为了方便调用proxy中的其他方法,还是另有考虑呢?




------解决方案--------------------
http://www.blogjava.net/aoneany/articles/271019.html
  相关解决方案