メソッド注釈で Aspectj ポイントカットを作成しようとしていましたが、さまざまなアプローチで常に失敗しました。私は、aspectj autoproxy を使用しています (Spring コンテキストで他のウィービングを構成していません)。私のクラスは次のようになります。
public interface Intf
{
@SomeAnnotation
void method1() throws SomeExc;
}
public class Impl implements Intf
{
@Override
public void method1() throws SomeExc
{
//...
}
}
@Aspect
public class MyAspect
{
@AfterThrowing(
pointcut = "execution(* *(..)) && @annotation(SomeAnnotation)",
throwing = "error")
public void afterThrowing(JoinPoint jp, Throwable error)
{
System.err.println(error.getMessage());
}
}
@Component
public class Usage
{
@Autowired
Intf intf;
public void doStuff()
{
intf.method1();
}
}
だから、なぜアスペクトがポイントカットを作成しないのか疑問に思っています。私はそれをうまく機能させることができましexecution(* *(..) throws SomeExc)
たが、何が間違っていたのか知りたいです。
またmethod1
、インターフェイスで定義されており、実装クラスでアノテーションを指定しているため、このように機能させる方法はありますか? トランザクション管理/セキュリティなどの他のプロキシメカニズムは、春の他の部分でこのように機能しますか? インターフェイスプロキシを使用している場合、実装クラスでポイントカットを指定するとポイントカットが作成されますか? (私は cglib を使用していないので、そうではないと思います)