cglib與jdk代理的區別,cgblib 代理接口原理_Spring5參考指南-AOP代理

 2023-12-06 阅读 29 评论 0

摘要:AOP代理通常來說Spring AOP有兩種代理方式,一種默認的JDK代理,只能代理接口,一種是CGLIB代理,可以代理具體的類對象。SpringAOP默認為對AOP代理使用標準的JDK動態代理。如果業務對象不實現接口,則使用CGLIB。如果使用CGLIB,要注意對

AOP代理

通常來說Spring AOP有兩種代理方式,一種默認的JDK代理,只能代理接口,一種是CGLIB代理,可以代理具體的類對象。

SpringAOP默認為對AOP代理使用標準的JDK動態代理。如果業務對象不實現接口,則使用CGLIB。

如果使用CGLIB,要注意對于CGLIB,不能advice final方法,因為它們不能在運行時生成的子類中被重寫。

cglib與jdk代理的區別、由于Spring的AOP框架基于代理的特性,根據定義,目標對象內的方法調用不會被攔截。對于JDK代理,只能截獲對代理的公共接口方法調用。使用cglib,可以截獲代理上的公共和受保護的方法調用(如果需要,甚至可以截獲包可見的方法)。

如果需要攔截在目標類內的方法調用甚至構造函數,那么考慮使用Spring驅動的native AspectJ weaving,而不是Spring的基于代理的AOP框架。

要強制使用CGLIB代理,請將元素的proxy target class屬性的值設置為true,如下所示:

<aop:config 

要在使用@Aspectj auto proxy支持時強制cglib代理,請將元素的proxy-target-class屬性設置為true,如下所示:

<aop:aspectj-autoproxy 

AOP Proxies原理

SpringAOP是基于代理的,那什么是代理呢?

cglib動態代理,首先我們考慮一個最簡單的POJO對象:

public 

如果直接調用該對象的方法,則運行原理如下所示:

f18058145a6734ff41361936a9093ea4.png

調用方法如下:

public 

typec接口原理,如果是調用代理,則運行原理如下:

a702cbcdfd5256b3f0e51bf0c1ba43e9.png

調用方法如下:

public 

本文的例子請參考aop-proxy

sdio接口。更多教程請參考 flydean的博客

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/5/189143.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息