人们经常会问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)