インタフェース+実装+ドライバアプリケーション:
package de.scrum_master.aspect;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import de.scrum_master.app.TestA;
@Aspect
public class MyAspect {
@Pointcut("call(public void accept(de.scrum_master.app.ParentInterface)) && args(argument)")
static void acceptCalls(TestA argument) {}
@Before("acceptCalls(argument)")
public void intercept(TestA argument, JoinPoint thisJoinPoint) {
System.out.println(thisJoinPoint + " -> " + argument);
}
}
:
package de.scrum_master.app;
public interface ParentInterface {}
package de.scrum_master.app;
public class TestA implements ParentInterface {}
package de.scrum_master.app;
public class TestB implements ParentInterface {}
package de.scrum_master.app;
public class Application {
public void accept(ParentInterface parent) {}
public static void main(String[] args) {
Application application = new Application();
application.accept(new TestA());
application.accept(new TestB());
}
}
アスペクトは、args()
+ポイントカットメソッドシグネチャを介して引数の型をダウンピニング
コンソールログ:
call(void de.scrum_master.app.Application.accept(ParentInterface)) -> [email protected]