現在、 aspectj と spring aop を使用して、HttpServletResponse.sendRedirect (api doc http://docs.oracle.com/javaee/6/api/javax/servlet/http/HttpServletResponse.html )への呼び出しにポイントカットを追加しようとしています。クラスとポイントカットのコードは次のとおりです。
@Aspect
@Log4j
class ExampleAspect {
@Before("execution(* javax.servlet.http.HttpServletResponse.sendRedirect(..))")
void logRedirectBeforeSending() {
log.warn('holy cow batman, its a redirect!')
}
}
現在、上記のコードはコンパイルされますが、実際には実行されません (ログに警告出力がなく、アドバイス コードのデバッグ ブレークポイントがヒットしないことから明らかです)。
簡単にするためにここではそれらを省略しましたが、アスペクトには正しく起動する他のポイントカットが含まれているため、潜在的な原因としてアスペクト構成を除外しました (これが、Spring Bean 構成を含めていない理由です)。
さらに、ポイントカットをテストしているときに HttpServletResponse.sendRedirect() を実装するクラスが呼び出されていることをデバッグを介して再確認しました (それが役立つ場合、呼び出されている実装クラスの 1 つは org.apache.catalina.connector.Response です)。https://tomcat.apache.org/tomcat-6.0-doc/api/org/apache/catalina/connector/Response.html )。
インターフェイスの周りにポイントカットを定義するときに必要なポイントカット定義に欠けているものはありますか? Spring AOP のドキュメントから、特別な構文は必要ないことがわかりました。
ポイントカット定義のバリエーションをいじっていますが、まだ運がありません。
全体として、私は困惑しています、何かアイデアはありますか?