2

我正在尝试使用pertypewithin实例化模型来实现跟踪方面。通过这种方式,我将能够为每种类型的每个类使用一个记录器。

从周围的一些示例中,我们可以找到以下代码来初始化记录器:

public abstract aspect TraceAspect pertypewithin(com.something.*) {
    abstract pointcut traced();
    after() : staticinitialization(*) {
        logger = Logger.getLogger(getWithinTypeName());
    }
    before() : traced() {
        logger.log(...);
    }
    //....
}

不幸的是,我无法将其完全转换为@AspectJ 语法(这是我无法控制的项目要求),尤其是我需要设置记录器的部分,只执行该代码一次。

这可能吗?

谢谢,

4

1 回答 1

7
@Aspect("pertypewithin(com.something.*))")
public abstract class TraceAspect {

Logger logger;

@Pointcut
public abstract void traced();

@Pointcut("staticinitialization(*)")
public void staticInit() {
}

@After(value = "staticInit()")
public void initLogger(JoinPoint.StaticPart jps) {
    logger = Logger.getLogger(jps.getSignature().getDeclaringTypeName());
}

@Before(value = "traced()")
public void traceThatOne(JoinPoint.StaticPart jps) {
    logger.log(jps.getSignature().getName());
}
}
于 2011-09-12T20:08:14.407 回答