【发布时间】:2016-08-03 15:29:48
【问题描述】:
我正在尝试使用 aspectJ 来拦截对实现我的 Loggable 接口的类上的公共方法的调用。 Loggable 是一个标记接口,没有定义任何方法。
我有一个before 建议,我想在其中获取包含正在调用的方法的具体类的名称。通过使用thisJoinPoint.getTarget(),我可以获得具体的类,但是当我调用thisJoinPoint.getTarget().getClass.getName() 时,我得到了一个stackoverflow 异常。
我很确定这是因为我在 Concrete 类上调用了一个公共方法,这会导致我的 before 建议重新触发。
这是我的切入点:
pointcut dave() : target(Loggable) && call (public * *(..) ) ;
如何将其限制为仅直接在具体类中定义的公共方法,而忽略那些从 java.lang.Object 继承的方法?
【问题讨论】:
-
这似乎可行:
pointcut dave() : target(Loggable) && call (public * *(..) ) && !this(LoggerAspect);- 关于它是否是一个好方法的任何意见? ( Logger Aspect 是我的切面的名称,所以我基本上是说不要将切入点应用于源自切面本身的调用。)