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 не перехватывает их?

Ответы на вопрос(1)

Ваш ответ на вопрос