Гарантированы ли статические инициализаторы для аспектов AspectJ? - PullRequest
1 голос
/ 09 февраля 2010

Это мой первый вопрос, поэтому, пожалуйста, будьте осторожны. :-) Я знаю, что AspectJ может создавать pointcut на статических инициализаторах java classes . Но вопрос в том, гарантированно ли статический инициализатор в аспекте, как показано ниже, будет вызываться ровно один раз:

@Aspect
public class MyAspect {
  private static Map configuration;
  static {
    // Some initialization stuff
    configuration = Config.getConfiguration();
  }
  ... use the "configuration" map in pointcuts and advices
}

Другими словами, загружен ли аспект так же, как загружен класс Java? Это сделано через ClassLoader? Я предполагаю, да - и, похоже, это работает - но я ищу гарантию в этом направлении.

1 Ответ

1 голос
/ 09 февраля 2010

AspectJ работает с использованием модификации байт-кода.Эта модификация может произойти во время компиляции («ткачество во время компиляции» или CTW) или во время загрузки («ткачество во время загрузки» или LTW).

Если вы хотите быть уверенным, то я предлагаю вам использовать компилятор aspectj для выполнения CTW на вашем примере, а затем передать полученные файлы классов через инструмент javap (или что-то подобное), чтобы увидетьэто действительно породило.Это должно дать вам уверенность в том, что он делает (или не делает) то, что, по вашему мнению, он делает.

...