[英]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使用模式,因此在做出決定之前一定要先熟悉編織。
在你問之前:將方法公開也無濟於事,因為它們將由Java序列化機制調用,而不是由Spring調用,因此Spring AOP不知道發生了什么。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.