#java #initialization #aspectj
#java #инициализация #aspectj
Вопрос:
Некоторые из моих классов Java имеют статические методы, помеченные специальной аннотацией, @Assert
, содержащие проверки работоспособности.
Я хотел бы выполнить эти проверки до фактического выполнения любого кода. Лучше всего было бы вызвать эти методы из <clinit>
. Как добиться аналогичного поведения с помощью AspectJ и без изменения исходного кода?
Ответ №1:
AspectJ предоставляет staticinitialization(TypePattern)
определение pointcut, которое будет выбирать существующие статические инициализаторы и перехватывать их. Однако, похоже, не удается добавить статические инициализаторы к классам, у которых их нет.
Комментарии:
1. Однако не обязательно должны быть явные
static
блоки, он может действовать как точка соединения при загрузке класса.
Ответ №2:
Просто чтобы добавить к ответу Джона; staticInitialization
pointcut не требует наличия каких-либо static
блоков, и в этом случае он действует как простая точка соединения загрузки класса.
Это было бы время для вызова ваших методов, аннотированных @Assert
.