【逆流而上】[Spring]靜態代理、動態代理詳解

靜態代理:

在程序運行前就已經存在代理類的字節碼文件,代理類和委託類的關係在運行前就肯定了

動態代理:

代理類的源碼是在程序運行期間由 JVM 根據反射等機制動態的生成,因此不存在代理類的字節碼文件

1.目標方法實現了接口 (經過 JDK 的代理生成 AOP 代理對象)
image.png
image.pngspa

2.目標方法沒有實現接口 (使用 cglib 來實現生成 AOP 代理對象)
image.png
image.png代理

總結:
JDK代理能夠生成與原類實現相同接口的一個類,可是若是原來的類沒有實現接口的話可能就不太適用。
cglib代理會使用一個字解碼的編譯器(ASM編譯器),能夠生成一個目標類的子類去實現相似的一個代理功能,cglib建立對象的過程可能會慢一點,可是在運行的時候可能效率會更高一些。code

相關文章
相關標籤/搜索