stackoverflow.com/questions/50391609/...
люди задают AspectJ такие вопросы, как этот, поэтому я хочу ответить на них в месте, на которое я могу легко связаться позже.
У меня есть эта аннотация маркера:
package de.scrum_master.app;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@Inherited
@Retention(RetentionPolicy.RUNTIME)
public @interface Marker {}
Теперь я комментирую интерфейс и / или методы, подобные этому:
package de.scrum_master.app;
@Marker
public interface MyInterface {
void one();
@Marker void two();
}
Вот небольшое приложение драйвера, которое также реализует интерфейс:
package de.scrum_master.app;
public class Application implements MyInterface {
@Override
public void one() {}
@Override
public void two() {}
public static void main(String[] args) {
Application application = new Application();
application.one();
application.two();
}
}
Теперь, когда я определяю этот аспект, я ожидаю, что он срабатывает
для каждого выполнения конструктора аннотированного класса идля каждого выполнения аннотированного метода.package de.scrum_master.aspect;
import de.scrum_master.app.Marker;
public aspect MarkerAnnotationInterceptor {
after() : execution((@Marker *).new(..)) && !within(MarkerAnnotationInterceptor) {
System.out.println(thisJoinPoint);
}
after() : execution(@Marker * *(..)) && !within(MarkerAnnotationInterceptor) {
System.out.println(thisJoinPoint);
}
}
К сожалению, аспект ничего не печатает, как будто классApplication
и методtwo()
не было никакого@Marker
аннотаций. Почему AspectJ не перехватывает их?