我正在做一場模擬考試,我不太理解其中一個答案,該答案缺乏解釋為什么它是正確的。(由 kriegaex 從這里向下編輯,添加下面評論中的問題以及一些格式和改寫,以使文本更加連貫和可讀。)問題: “以下關于 Spring 代理功能的說法哪一項是正確的?”答: “有一種 Spring 代理可以替換方法返回的對象?!睋宜?,Spring AOP 可以使用兩種類型的代理:JDK動態代理CGLIB 代理據我了解,這是 Spring 中大量使用的兩種類型的代理。例如,當使用@Transactional或創建方面 ( @Aspect) 時。我對給出的答案的理解是他們指向的是這個@Around方面。但是,我不明白為什么他們稱其為“Spring 代理類型”。方面是代理嗎?因此,我對使用 JDK 或 CGLIB 代理的方面的理解是否不正確?
1 回答

慕桂英546537
TA貢獻1848條經驗 獲得超10個贊
如果您提供了所有可能的答案(包括不正確的答案),這個問題會更容易理解。但鑒于正確的(這確實聽起來很奇怪),我可以告訴你以下內容:
JDK 和 CGLIB 代理都有相同的目的:包裝和替換原始對象,以便能夠向其方法調用注冊一些攔截器,無論是通過 Spring AOP 還是其他方法。
是的,這兩種代理類型在 Spring 中都大量使用,JDK 代理用于實現接口的類,CGLIB 代理用于未實現任何接口的類?;蛘撸梢詫?Spring 配置為對接口類型也使用 CGLIB 代理。
不存在“
@Around
方面”這樣的東西,只有@Around
建議類型(除了其他建議類型,例如@Before
和@After
)。不,方面不是代理。但是 Spring AOP 使用代理來實現其通過委托模式執行 AOP 的方式,這與 AspectJ 不同,AspectJ 不使用任何代理,而是使用直接字節碼工具來實現其目標。
在 Spring 文檔中查找更多信息。
添加回答
舉報
0/150
提交
取消