Синтаксис @AspectJ для "after (): staticinitialization (*)" - PullRequest
2 голосов
/ 12 сентября 2011

Я пытаюсь реализовать аспект трассировки, используя pertype с моделью реализации. Таким образом, я смогу использовать по одному регистратору на класс для каждого типа.

Из некоторых примеров мы можем найти этот код для инициализации регистратора:

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

к сожалению, я не могу полностью перевести это на синтаксис @AspectJ (это требование проекта вне моего контроля), особенно в части, где мне нужно настроить регистратор, выполняя этот код только один раз.

Возможно ли это?

Спасибо

1 Ответ

7 голосов
/ 13 сентября 2011
@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());
}
}
...