4

メソッド注釈で 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 を使用していないので、そうではないと思います)

4

2 に答える 2

3

MyAspectクラスに@Componentを追加してみてください

@Component
@Aspect
public class MyAspect {
...
于 2013-02-19T09:03:12.000 に答える
3

アスペクトメソッドをマークするだけです

@After("@annotation(package.SomeAnnotation)")

ステップバイステップガイドについては、これをご覧ください

于 2013-07-01T08:04:43.683 に答える