2

我不知道这是否可能,但我正在尝试编写一个切入点,该切入点将匹配任何返回实现特定接口的对象的方法。

鉴于以下情况:

public class User implements Auditable{
   private int id;

   private String name;

   public String getName(){
      return name;
   }
}

和可审计的接口:

public interface Auditable{
   public String getName();
}

还有一些随机类:

public class RandomClass{
    public User getNewUser(){
       User u = new User();
       return u;
    }
}

如何编写一个“AfterReturning”切入点来捕获任何实现 Auditable 的名为 getNew* 的方法?

以下作品:

pointcut auditablePointcut(): call(public * *.getNew*(..))

但是,这将匹配任何返回类型。以下不起作用:

pointcut auditablePointcut(): call(public Auditable *.getNew*(..))

我想我可以使用 if() 来编写它,但这似乎有点笨拙(我还没有尝试过)。还是有更优雅的方式?

4

2 回答 2

1

after () returning (Audible au) : call(public * *.getNew*(..))

于 2013-12-02T19:15:55.717 回答
0

我不确定切入点,但是您可以在以下方面检查方法的返回类型:

MethodSignature signature = (MethodSignature)joinPoint.getSignature();
signature.getReturnType(); // method return type
于 2013-11-29T20:56:33.237 回答