因为需要看spring源代码,看到代理这个词看不懂,后面顺着线索发现需要学习一下设计模式的动态代理,然后疯狂补课,结果发现,都不知道在说什么例子给的也比较抽象,好在自己付出快4小时还是有一些微弱的感悟的。写一写,免得自己忘记也可以帮一帮码友。
首先是例子,我发现其他博客写的例子,也就是什么中介什么租房子,根本感觉不适合理解他的本质,他虽然能够快速理解三方但是我一直没明白内核。
他的内核实际上非常的简单,就是我有一个代码A,但是我现在需要针对代码A执行之后,我需要立即执行一下代码B。(或者在代码A之前我一定要执行代码A)那简单直接B CV一下到代码A不就完了。
不行! 不够优雅~
其实只是破坏了软件开发原则,尽量让自己已经写完的代码尽量不去修改。
所以这时候要一个代理!
所以他要完成的工作就是在代码A之上,完成代码B。也就是完全不动已经原有的代码,新增一个代理类就能够实现。
所以在结合什么中介那三个模型,你就能够明白被代理的实际上就是不想改代码的A,也就是房东,proxy也就是中介,调用者也就是租客。
但最重要的是:lz就是不想改A代码,我就是要写增量式
这个才是核心是目标,也是我个人认为为啥要有代理模式。。。
好了,明白这个原理,去看别人写的代码就好理解很多很多很多了。
这里贴两个个人觉得写的比较好的博客:
https://blog.csdn.net/Passer_hua/article/details/122617628
https://blog.csdn.net/m0_51380306/article/details/119912574
我个人插一嘴,我并没有get到静态代理跟直接JDK使用的动态代理有什么区别。
因为我的理解是,从代码编码角度来说,我都是做到了代码A不动,新增一个类,然后PSVM执行写一写。
完了我看到那个博客说的是在生成代理不同,确实,因为静态代理中,我们编写的实际上就是代理类,但是在JDK里面反而不是,相当于只是一个Factory类似的东西,最终的代理是在proxy.newinstance那边生成的。
但在我看来我还是没有太感受到他们之间的差别。
写着突然感觉可以猜到,应该是在proxy第二个参数那边,传入接口数组那边可能能写个花的。。但我现在还参透不了。
有大神希望解答一下,谢谢~