簡體   English   中英

用於Serializable的Spring AOP切入點

[英]Spring AOP Pointcut for Serializable

是否可以為SpringBean Serializable創建切入點?

我想用語法攔截我的控制器的writeObject和readObject:

execution(* ((@org.springframework.stereotype.Controller java.io.Serializable)+).*(..))

我認為問題是readObject / writeObject是私有的,並以不同的方式調用。 有什么建議嗎?

問題是:Spring AOP將無法匹配這些切入點。 Spring AOP僅匹配公共方法的切入點。 您將需要AspectJ編譯或加載時間編織才能使其正常工作。

注意

由於Spring的AOP框架基於代理的特性,受保護的方法根據定義不會被攔截,既不用於JDK代理(這不適用),也不用於CGLIB代理(這在技術上可行,但不建議用於AOP)。 因此,任何給定的切入點都只能與公共方法匹配!

如果您的攔截需要包括受保護/私有方法甚至構造函數,請考慮使用Spring驅動的本機AspectJ編織而不是Spring的基於代理的AOP框架。 這構成了具有不同特征的不同AOP使用模式,因此在做出決定之前一定要先熟悉編織。

資料來源: 8.2.3.1。 支持的切入點指示符

在你問之前:將方法公開也無濟於事,因為它們將由Java序列化機制調用,而不是由Spring調用,因此Spring AOP不知道發生了什么。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM