2

何らかの理由で、私のSpringAOPアドバイスが2回呼び出されています。私がチェックしました:

  1. Spring AOPアドバイスは2回呼び出されますが、私はComponentアノテーションを使用しておらず、アスペクトBeanを1回宣言し、@Aspectでアノテーションを付けています。それだけです。

  2. やや遅れて、クラスの1つがまだインターフェイスを実装していないことに気付きました。これにより、CGLIB2要件が発生しました。これを修正すると、CGLIB2の問題は解決しましたが、二重呼び出しは残っています。

編集:

私がチェックしたことを忘れてしまいました、そしてアドバイスされているメソッドは二度呼び出されません。

2番目の編集:

@Aspectを使用してクラスを宣言してから、アプリケーションコンテキストでBeanとして宣言します。XMLファイルにはアドバイスやポイントカットはありません。

3番目の編集:

また、注目に値するのは、Aroundでアドバイスされているメソッドの実行の前後にログを記録することです。

log.info("before");

pjp.proceed();

log.info("after");

私が見ているのは:

before
before
after
after

これは本当に奇妙です。

これは、私が設定した@Beforeと@Aroundの両方のアドバイスで発生します。私はまだ他のタイプを試していません。

名前が変更されたポイントカット宣言は次のとおりです。

@Around("execution(public java.util.List<java.lang.String> pac.age.names.myDAO.doSomething(java.lang.String, java.lang.String))")

何か案は?

ありがとう、

スノーケル

4

3 に答える 3

3

まあ、これは実際にはロガーの問題のようです。今朝確認したところ、すべてが 2 回ログに記録されていることがわかりました。ロガー呼び出しを通常の sysout 呼び出しに置き換えたところ、すべて正常に機能しました。

于 2012-07-17T14:25:08.607 に答える