关于静态代理我就不说了,完全是自己的思想去实现。
动态代理的例子我也不写了,我这里仅仅写几个简单的类来说明一下
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文件,加入新的东西,用流的方式处理的。不知道正确不,也同样希望高手给个答案。