AspectJ: добавить статический инициализатор в класс

#java #initialization #aspectj

#java #инициализация #aspectj

Вопрос:

Некоторые из моих классов Java имеют статические методы, помеченные специальной аннотацией, @Assert , содержащие проверки работоспособности.

Я хотел бы выполнить эти проверки до фактического выполнения любого кода. Лучше всего было бы вызвать эти методы из <clinit> . Как добиться аналогичного поведения с помощью AspectJ и без изменения исходного кода?

Ответ №1:

AspectJ предоставляет staticinitialization(TypePattern) определение pointcut, которое будет выбирать существующие статические инициализаторы и перехватывать их. Однако, похоже, не удается добавить статические инициализаторы к классам, у которых их нет.

Комментарии:

1. Однако не обязательно должны быть явные static блоки, он может действовать как точка соединения при загрузке класса.

Ответ №2:

Просто чтобы добавить к ответу Джона; staticInitialization pointcut не требует наличия каких-либо static блоков, и в этом случае он действует как простая точка соединения загрузки класса.

Это было бы время для вызова ваших методов, аннотированных @Assert .