4

SpringBean Serializableのポイントカットを作成することは可能ですか?

コントローラーのwriteObjectとreadObjectを次の構文でインターセプトしたいと思います。

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

問題は、readObject / writeObjectがプライベートであり、別の方法で呼び出されることだと思います。なにか提案を ?

4

1 に答える 1

4

重要なのは、SpringAOPはこれらのポイントカットに一致することができないということです。Spring AOPは、パブリックメソッドのポイントカットにのみ一致します。これを機能させるには、AspectJコンパイルまたはロードタイムウィービングが必要です。

ノート

SpringのAOPフレームワークのプロキシベースの性質により、保護されたメソッドは、JDKプロキシ(これが適用されない場合)でもCGLIBプロキシ(技術的には可能であるがAOPの目的では推奨されない場合)でも、定義上インターセプトされません。 結果として、特定のポイントカットはパブリックメソッドとのみ照合されます。

インターセプトのニーズに保護/プライベートメソッドまたはコンストラクターが含まれる場合は、SpringのプロキシベースのAOPフレームワークの代わりに、Spring駆動のネイティブAspectJウィービングの使用を検討してください。これは、さまざまな特性を持つさまざまなAOP使用モードを構成するため、決定を下す前に、まず織りに慣れてください。

出典:8.2.3.1。サポートされているポイントカット指定子

そして、質問する前に、メソッドをパブリックにすることも役に立ちません。メソッドはSpringではなくJavaシリアル化メカニズムによって呼び出されるため、SpringAOPは何が起こっているのかを認識していません。

于 2012-06-21T12:46:11.783 に答える