动态代理的两种方式_动态代理是基于什么原理?
代理模式
給某個對象提供一個代理對象,并由代理對象控制對于原對象的訪問。
什么是動態代理
運行時動態生成代理類。
動態代理我們需要些什么
1.業務接口(Interface)
業務的抽象表示。
2.業務具體實現類(concreteManager)
實現業務接口,執行具體的業務操作。
3.業務代理類($proxy,在運行的時候動態生成的類)
進行業務代理,調用業務代理操作類。
4.業務代理操作類(proxyHandler,實現了InvocationHandler接口的類)
代理方法的直接調用者,通過InvocationHandler中的invoke方法直接發起代理。
5.客戶端調用對象(client)
發起業務。
Java動態代理、cglib動態代理
按照代理的創建時期,代理類可以分為兩種:
靜態代理:由程序員創建或特定工具自動生成源代碼,再對其編譯。在程序運行前,代理類的.class文件就已經存在了。
動態代理:在程序運行時,運用反射機制動態創建而成。
動態代理是基于什么原理?
動態代理是基于反射機制,在程序運行時,動態構建代理、動態處理代理方法調用的機制。很多場景都是利用類似機制做到的,比如用來包裝RPC調用、面向切面的編程(AOP)。
實現動態代理的方式很多,比如JDK 自身提供的動態代理,就是主要利用了上面提到的反射機制。還有其他的實現方式,比如利用更高性能的字節碼操作機制,CGLIB(基于ASM)。
代理機制
首先,動態代理是一個代理機制。
代理可以看作是對調用目標的一個包裝,這樣,我們對目標代碼的調用不是直接發生的,而是通過代理完成的。
通過代理可以讓調用者與實現者之間解耦。比如進行RPC 調用,框架內部的尋址、序列化、反序列化等,對于調用者往往是沒有太大意義的,通過代理,可以提供更加友好的界面。
總結
以上是生活随笔為你收集整理的动态代理的两种方式_动态代理是基于什么原理?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: sklearn 随机森林_初识随机森林及
- 下一篇: html点击按钮切换图片代码_SVG创意