Spring(バージョン2.5.6)でのポイントカット定義に問題があります。特定のメソッド(以下の例ではsomeMethod)を除いて、クラスへのすべてのメソッド呼び出しをインターセプトしようとしています。
<aop:config>
<aop:advisor
pointcut="execution(* x.y.z.ClassName.*(..)) AND NOT
execution(* x.y.x.ClassName.someMethod(..))"
/>
</aop:config>
ただし、インターセプターはsomeMethodに対しても呼び出されます。
それから私はこれを試しました:
<aop:config>
<aop:advisor
pointcut="execution(* x.y.z.ClassName.(* AND NOT someMethod)(..)) )"
/>
</aop:config>
しかし、これは有効な構文ではないためコンパイルされません(BeanCreationExceptionが発生します)。
誰かが何かヒントを与えることができますか?
この段階ではおそらく少し遅れていることはわかっていますが、同じ問題が発生しているので、アンパサンド文字をエスケープして&& !
'ANDNOT 'または' &&! 'の代わりに。私はこれをxmlファイルで行っています
<aop:config>
<aop:pointcut id="blah" expression="execution(* com.disney.goofy..*.*(..)) && !@annotation(com.disney.goofy.NonDisneyCharacter)"/>
<aop:advisor advice-ref="transAdvice" pointcut-ref="blah"/>
</aop:config>
これは、com.disney.goofyで実行され、NonDisneyCharacterアノテーションが付けられていないすべてのメソッドにアドバイスを適用します。
これは機能するはずです( 春のAOPリファレンス ):
pointcut="execution(* x.y.z.ClassName.*(..))
&& !execution(* x.y.x.ClassName.someMethod(..))"
私もSpring2.5.6を使用していて、[〜#〜] or [〜#〜]が機能しないという同様の問題がありましたが、[〜#〜] and [〜 #〜]は動作していました。 または(小文字)は機能することが判明したため、そのコードには明らかにバグがあります。
適切なaspectJ構文が&&、、および!であるのは興味深いことですが、and/or/not構文はSpringによって追加されましたxmlでの作業を簡単にします。マニュアルから:
ポイントカットの部分式を組み合わせる場合、XMLドキュメント内で「&&」は扱いにくいため、「&&」、「||」の代わりにキーワード「および」、「または」および「not」を使用できます。および「!」それぞれ。
&&が実際にxmlで厄介な唯一のものであるため(|またはを置くことについて難しいことは何もありません) !in xml)then [〜#〜] and [〜#〜]が適切にテストされた唯一のものです