Синтаксис @AspectJ для "after(): staticinitialization(*)"
Я пытаюсь реализовать аспект трассировки, используя модель создания экземпляра pertypewithin. Таким образом, я смогу использовать один регистратор для каждого класса.
Из некоторых примеров мы можем найти этот код для инициализации регистратора:
public abstract aspect TraceAspect pertypewithin(com.something.*) {
abstract pointcut traced();
after() : staticinitialization(*) {
logger = Logger.getLogger(getWithinTypeName());
}
before() : traced() {
logger.log(...);
}
//....
}
К сожалению, я не могу полностью перевести это на синтаксис @AspectJ (это требование проекта вне моего контроля), особенно в части, где мне нужно настроить регистратор, выполняя этот код только один раз.
Это возможно?
Спасибо,
1 ответ
Решение
@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());
}
}