2012-06-21 107 views
4

是否可以爲SpringBean Serializable創建切入點?可串行化的Spring AOP切入點

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

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

我認爲這個問題是的readObject /的writeObject是私有的,並要求以不同的方式。任何建議?

回答

4

事情是: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是不意識到發生了什麼。