의 미러
https://github.com/eclipse-aspectj/aspectj.git
synced 2024-08-26 17:58:43 +02:00
61 lines
1.4 KiB
Java
61 lines
1.4 KiB
Java
import org.aspectj.testing.Tester;
|
|
|
|
public class OverridingPointcuts {
|
|
public static void main(String[] args) {
|
|
C c1 = new C();
|
|
C c2 = new C();
|
|
|
|
c1.m1();
|
|
c2.m2();
|
|
|
|
Tester.checkEqual(c1.m1(), "A1-m1");
|
|
Tester.checkEqual(c2.m2(), "m2");
|
|
|
|
Tester.checkEqual(c1.m3(), "A1-m3");
|
|
Tester.checkEqual(c2.m3(), "m3");
|
|
|
|
Tester.check(!A2.hasAspect(c1), "c1 hasa A2");
|
|
Tester.check(A1.hasAspect(c1), "c1 hasa A1");
|
|
|
|
Tester.check(A2.hasAspect(c2), "c2 hasa A2");
|
|
Tester.check(!A1.hasAspect(c2), "!c2 hasa A1");
|
|
}
|
|
}
|
|
|
|
|
|
class C {
|
|
public String m1() { return "m1"; }
|
|
public String m2() { return "m2"; }
|
|
public String m3() { return "m3"; }
|
|
}
|
|
|
|
abstract aspect A pertarget(target(C) && call(String m2())) {
|
|
int cached;
|
|
|
|
abstract pointcut testpoint();
|
|
|
|
String modifyResult(String r) { return "A-" + r; }
|
|
|
|
String around (): testpoint() {
|
|
return modifyResult(proceed());
|
|
}
|
|
}
|
|
|
|
aspect A1 extends A pertarget(target(C) && call(String m1())) {
|
|
pointcut testpoint() : call(String C.*(..));
|
|
|
|
String modifyResult(String s) { return "A1-" + s; }
|
|
}
|
|
|
|
aspect A2 extends A {
|
|
pointcut testpoint();
|
|
}
|
|
|
|
/*
|
|
public aspect A2 extends A of eachobject(instanceof(C) && receptions(String m2())) {
|
|
pointcut testpoint() returns String: receptions(String *(..));
|
|
|
|
String modifyResult(String s) { return "A2-" + s; }
|
|
}
|
|
*/
|