`
harrison2010
  • 浏览: 105531 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

java动态代理底层探讨

阅读更多

关于静态代理我就不说了,完全是自己的思想去实现。

动态代理的例子我也不写了,我这里仅仅写几个简单的类来说明一下

interface person

class  teacher implements person

class proxyfactory  implements invacationhandle

 

class proxyTest

 

先说下我的问题在那里,问题就在proxyfactory中的实现invactionhandle的invoke方法,

问题1:第一个参数proxy的作用

问题2:当我debug的时候,这个方法返回的是个null

问题3:当method的invoke方法的object参数如果换成proxy的话,会是死循环

 

google上看到一个高手是这么说的

1.当debug的时候看到proxy并不是null,而是$proxy ,而且被绑定到proxyfactory对象名为h

2.另一个哥们说proxy看似代理对象,其实仅仅是为了检查权限的

 

 

请高手们给个详细的解释,期待中!不知道原理是很痛苦的事情。

++++++++++++++++++++++++++++++++++

新发现,补充一下:

1.proxy实际就是生成的代理对象,但是不知道为什么要传入那个参数。

2.生成代理对象虽然不是为null但是调用一些hachcode等方法时会报空指针异常

3.我的推测是当生成的这个代理对象去执行一个方法的时候,因为这个代理对象本身是一个$proxy0(debug的时候看到的),肯定jvm对这样的对象有一定的监听机制,监听到以后会去调代理对象所属的invocationhandle的invoke方法,吧method以及args都传递过去,但是现在还不明白为什要吧proxy也传递过去。

 

待续.......

++++++++++++++++++++++++++++++++++

再补充:

又另一个兄弟这么说:

说动态代理实际是解析被代理对象的class文件,加入新的东西,用流的方式处理的。不知道正确不,也同样希望高手给个答案。

3
0
分享到:
评论
1 楼 zyh_1986 2010-04-06  
明白了一些……谢谢!
invoke()返回null应该是你自己的原因,如果你接收了method.invoke()的返回值并将其返回是不是就不为null了?

相关推荐

Global site tag (gtag.js) - Google Analytics