私のプロジェクトは Spring Web フロー 2.4 を使用しています。Spring AOP を使用してフロー スコープ Bean にアドバイスし、ロギングなどのアスペクト要件を処理する必要があります。アスペクトクラスは次のとおりです。
@Aspect
@Component
public class LogFlowEventExecutor {
@Pointcut("execution(public * com.xyz.app.flow.*FlowBean.*(..))")
private void flowFunction() {}
@Before("flowOperation()")
public void logFlowEvent(JoinPoint jp) throws Throwable {
//logic ignored
...
}
}
また、ルート WebApplicationContext で autoproxy を定義します。
<aop:aspectj-autoproxy />
そして個々の -flow.xml ファイル
<flow xmlns="http://www.springframework.org/schema/webflow"...>
<var name="abcFlowBean" class="com.xyz.app.flow.AbcFlowBean" />
...
</flow>
Service Bean と Controller に簡単にアドバイスするために同じパターンを使用しましたが、フロースコープの Bean では機能せず、アスペクトは実行されませんでした。JDK動的インターフェースプロキシの何かかと思ったのですが、CGLIBでも失敗しました(proxy-target-class="true"属性が設定されていました)。ポイントカットは傍受されませんでした。そのため、フロースコープ Bean がインスタンス化されたときに適切にプロキシされていないのではないかと疑っていました。
LTW に切り替えようとしましたが、NoSuchMethodError がスローされました (Bean は weaveinfo ログから織り込まれました)。それだけのために別のスレッドを立てたほうがいいかもしれません。
私の質問は、Spring AOP を使用してフロー スコープ Bean とその方法をアドバイスすることは可能でしょうか?