error at::0 can't find referenced pointcutとerror at::0 formal unbound in point
注記を使用してSpring AOPを構成すると、2つのerrorが見つかりました.
1. error at::0 can't find referenced pointcut
2. error at::0 formal unbound in point
1番目のエラーについては、spring 2.0のバージョンのaspectjrt.jarとjdk 6が互換性がない場合、ネット上では説明されています.
私の環境について言えば、JDK 7+Spring 3.6.6なので、aspectjrt.jarの問題ではありません(なぜそう確信していますか?以下を参照してください).最初は異なるバージョンのaspectjrt.jarファイルも使ってみましたが、機能しませんでした.そこで私はaspectjweaver.jarの問題かもしれないと疑っています.使用しているバージョンが低いからです(1.5).
そこで新しいバージョンaspectjweaver-1.6.12をダウンロードして古いものを置き換え、1番目のエラーは解決し、classpathにはaspectjrt.jarは含まれていません.
2番目のエラーについて、私のコードを貼ってください.
次のように変更します.
これで2番目の間違いはなくなりました.つまりafterCallメソッドのパラメータを外せばよいのです.
実際、この解決策は間違っています.SpringのAOPはそんなに不自由ではなく、私たちが使っているのが間違っているからです.
(1)JoinPointにアクセスする場合は、afterCallなどのorg.aspectj.lang.JoinPointを通知(afterCall)の最初のパラメータとして使用するだけです.では、なぜ上のコードが間違っているのでしょうか.簡単です.パラメータをよく見てください.org.aopalliance.intercept.Joinpointを使用しています.aopalliance.jarパッケージから来ています.これはIDEの自動補完機能を使用する場合に起こりやすいエラーです.JoinPointと書いてあるか確認してください.
(2)通知(advice)にパラメータを渡す場合はargsパラメータを使用します.以下のようにします.
詳しくはSpringドキュメントを参照してください.ちなみにSpring AOP依存のjarパッケージを添付します.
1. error at::0 can't find referenced pointcut
2. error at::0 formal unbound in point
1番目のエラーについては、spring 2.0のバージョンのaspectjrt.jarとjdk 6が互換性がない場合、ネット上では説明されています.
私の環境について言えば、JDK 7+Spring 3.6.6なので、aspectjrt.jarの問題ではありません(なぜそう確信していますか?以下を参照してください).最初は異なるバージョンのaspectjrt.jarファイルも使ってみましたが、機能しませんでした.そこで私はaspectjweaver.jarの問題かもしれないと疑っています.使用しているバージョンが低いからです(1.5).
そこで新しいバージョンaspectjweaver-1.6.12をダウンロードして古いものを置き換え、1番目のエラーは解決し、classpathにはaspectjrt.jarは含まれていません.
2番目のエラーについて、私のコードを貼ってください.
@After("testBeanExecution()")
public void afterCall(Joinpoint jp) {
System.out.println("After");
}
次のように変更します.
@After("testBeanExecution()")
public void afterCall() {
System.out.println("After");
}
これで2番目の間違いはなくなりました.つまりafterCallメソッドのパラメータを外せばよいのです.
実際、この解決策は間違っています.SpringのAOPはそんなに不自由ではなく、私たちが使っているのが間違っているからです.
(1)JoinPointにアクセスする場合は、afterCallなどのorg.aspectj.lang.JoinPointを通知(afterCall)の最初のパラメータとして使用するだけです.では、なぜ上のコードが間違っているのでしょうか.簡単です.パラメータをよく見てください.org.aopalliance.intercept.Joinpointを使用しています.aopalliance.jarパッケージから来ています.これはIDEの自動補完機能を使用する場合に起こりやすいエラーです.JoinPointと書いてあるか確認してください.
(2)通知(advice)にパラメータを渡す場合はargsパラメータを使用します.以下のようにします.
@Before("com.xyz.myapp.SystemArchitecture.dataAccessOperation() &&" +
"args(account,..)")
public void validateAccount(Account account) {
// ...
}
詳しくはSpringドキュメントを参照してください.ちなみにSpring AOP依存のjarパッケージを添付します.