相关疑难解决方法(0)

使用AspectJ模拟接口和方法的注释继承

人们经常会问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 {}
Run Code Online (Sandbox Code Playgroud)

现在我注释一个接口和/或方法,如下所示:

package de.scrum_master.app;

@Marker
public interface MyInterface {
  void one();
  @Marker void two();
}
Run Code Online (Sandbox Code Playgroud)

这是一个小驱动程序应用程序,它也实现了接口:

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();
  }
}
Run Code Online (Sandbox Code Playgroud)

现在,当我定义这个方面时,我希望它被触发

  • 为每个构造函数执行带注释的类和
  • 每次执行带注释的方法.
package de.scrum_master.aspect;

import de.scrum_master.app.Marker;

public aspect MarkerAnnotationInterceptor {
  after() : execution((@Marker *).new(..)) && …
Run Code Online (Sandbox Code Playgroud)

java inheritance annotations aspectj

6
推荐指数
1
解决办法
2109
查看次数

标签 统计

annotations ×1

aspectj ×1

inheritance ×1

java ×1