3

spring と AspectJ を使用した Load-Time-Weaving を使用すると、奇妙な問題が発生します。私の Apsects の 1 つで、クラス org.springframework.flex.security3.SpringSecurityLoginCommand の「doAuthentication」メソッドの呼び出しに反応したいと考えました。したがって、メソッドを作成しました:

@Around("execution(* org.springframework.flex.security3.SpringSecurityLoginCommand.doAuthentication(..))")
public Object aroundDoAuthentication(ProceedingJoinPoint pjp) throws Throwable {
...

このアスペクトは、aspectj-weaver エージェントを使用すると正しく織り込まれますが、spring-weaver を使用すると無視されます。残念ながら、正しいアスペクトスプリング統合が必要な場合は、スプリングウィーバーを使用する必要があります。アスペクトを織り込む唯一の方法は、ターゲット クラスのすべてのメソッドに織り込み、アスペクト呼び出しをプログラムでフィルタリングすることです。

@Around("execution(* org.springframework.flex.security3.SpringSecurityLoginCommand.*(..))")
public Object aroundDoAuthentication(ProceedingJoinPoint pjp) throws Throwable {
    final String methodName = pjp.getSignature().getName();
    if("doAuthentication".equals(methodName)) {
    ...

上記のコードを使用して、すべてを正しく織り込むことができましたが、これは私にとって大きなハックのように思われるため、満足していません。

Spring-Weaver を使用して、aspectj-weaver と同じように織ることができない理由を誰か説明してもらえますか?

クリス

4

1 に答える 1

0

コードはわかりませんが、これは同じ古い質問です。

Spring AOPは、デフォルトのプロキシベースです。

これは、Beanの外部からのメソッドの呼び出しのみがプロキシを通過することを意味します。したがって、この呼び出しのみがAOPアドバイスをトリガーできます。

于 2011-06-22T10:36:31.697 に答える