@ afterpectJ语句为“after():staticinitialization(*)”

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

从我们的一些例子中我可以找到这个代码来初始化记录器:

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

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

这可能吗?

谢谢,

 @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()); } }