【问题标题】:Help with pointcut - AspectJ切入点帮助 - AspectJ
【发布时间】:2011-06-19 12:19:10
【问题描述】:

我对切入点中的参数有点困惑,如果有人可以向我解释一下,我将不胜感激......

import Java.util.logging.*;
import org.aspect j.lang.*;

public aspect TraceAspect {
private Logger _logger = Logger.getLogger("trace");

TraceAspectV2() {
      _logger.setLevel(Level.ALL);
}

pointcut traceMethods()
(execution(* Account.*(..)) || execution(*.new(..)))    && !within(TraceAspect);

before () : traceMethods() {
     if (_logger.isLoggable(Level.INFO)) {
          Signature sig = thisJoinPointStaticPart.getSignature();
          _logger.logp(Level.INFO, sig.getOeclaringType().getName(),sig.getNameO , "Entering");
          }
     )
)

切面中的切入点定义了何时应该生成跟踪消息。描述在 您自己的话,即在程序的哪些点,日志消息“正在输入” 将生成。

PS:这是来自过去的试卷....我试图了解记录器何时生成 Entering....

【问题讨论】:

    标签: logging aop aspectj


    【解决方案1】:

    每次执行 Account 类中的方法之前都会打印输入 (execution(* Account.*(..))),无论返回值、名称或参数如何; execution(*.new(..)) && Iwithin(TraceAspect) 匹配不在 TraceAspect 中的每个构造函数(应阅读 !within(…) 而不是 Iwithin — 参见 aspectJ cookbook on google books,OCR 将感叹号 ! 识别为大写字母 i I)。

    【讨论】:

    • 所以基本上每次执行来自帐户的方法以及每次执行除traceAspect之外的任何类的构造函数时都会打印输入..??
    • @john:是的,正确的。 execution 确保即使对于反射调用也能执行建议。另一个选项是call(…),但该建议仅对直接调用该方法有效
    【解决方案2】:

    在匹配执行切入点签名的方法之前生成“进入”消息。看起来这建议所有对 Account 类的 new 调用。

    【讨论】:

      猜你喜欢
      • 2015-10-25
      • 1970-01-01
      • 1970-01-01
      • 2023-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多