簡體   English   中英

Spring aspectj注釋切入點

[英]Spring aspectj annotation pointcut

我試圖在方法注釋上創建一個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();
  }
}

所以我想知道為什么aspectj不會創建切入點。 我設法讓它工作使用execution(* *(..) throws SomeExc)為我做的工作,但我仍然想知道我做錯了什么。

此外,由於method1是在接口中定義的,並且我在實現類上指定了注釋,有沒有辦法讓它以這種方式工作? 其他代理機制,如事務管理/安全性在彈簧的其他部分以這種方式工作嗎? 如果我使用接口代理將指定實現類的切入點創建切入點? (我猜不是因為我沒有使用cglib)

嘗試將@Component添加到MyAspect類

@Component
@Aspect
public class MyAspect {
...

只需使用標記方法

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

看一下這個分步指南

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM