为啥一调用方法 invoke就得到执行?
今天群友提问,为啥一调用方法 invoke就得到执行?
这问题看起来很简单,刚想回答,发现我确实不知道,这问题很犀利。
前情提要
要搞清楚这个问题,得先了解什么是动态代理,及其原理。
参考我之前的文章:动态代理,及其原理
参考大神文章:www.cnblogs.com/liuyun1995/…
开始
反射出真的代理类 为啥传了一个参数呢???传的是h 也就是那个代理类的构造函数是有参数的 参数就是h
而这个h就是传入的处理器
也就是他 问题的那个 为啥这里会执行的处理器
所以 结论就是
深入
那么 为啥会这么走呢?会走Proxy的invoke???
代理类是通过ProxyClassFactory这个工厂创建的
这个工厂的创建代理类的方法 会走到ProxyGenerator.java的generateProxyClass()方法,这个方法,是通过generateClassFile这个来创建代理类的
generateClassFile
简单说就是
1.收集所有要生成的代理方法,将其包装成ProxyMethod对象并注册到Map集合中。
2.将这些方法 赋值,设置代理invoke
3.生成代理类
重点是第二步 --- 将这些方法 赋值,设置代理invoke
在第二步的第一步上 generateConstructor()
他将InvocationHandler当成构造函数的参数生成了 所以代理类里就有这个
第二步的第二步上,设置方法里的内容时,他将invoke设置进去了
...
效果就是
你调hashCode就是调用InvocationHandler的invoke
他这是用字节码的io的方式 生成代理方法,代理类的 ,完事了 去吃饭了。