是否可以爲SpringBean Serializable創建切入點?可串行化的Spring AOP切入點
我想用語法攔截我的控制器的writeObject和readObject:
execution(* ((@org.springframework.stereotype.Controller java.io.Serializable)+).*(..))
我認爲這個問題是的readObject /的writeObject是私有的,並要求以不同的方式。任何建議?
是否可以爲SpringBean Serializable創建切入點?可串行化的Spring AOP切入點
我想用語法攔截我的控制器的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. Supported Pointcut Designators
而且你問之前:製作方法公衆也不會有幫助,因爲他們會由Java序列化機制來調用,而不是由Spring,所以Spring AOP是不意識到發生了什麼。