[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
Re: [aspectj-users] suspicious super call interception
|
public class A {
public static void main(String []argv) {
B b = new B();
b.run();
}
}
class Base {
public void getPort() {
System.out.println("Base.getPort()");
}
}
class B extends Base {
public void run() {
super.getPort();
getPort();
}
public void getPort() {
System.out.println("B.getPort()");
}
}
javac A.java
java A
Base.getPort()
B.getPort()
they can do different things. If your question is why your advice
didn't match, it is because super calls are not join points. And that
is probably a hangover from the old days of source weaving I think,
which has just never been revisited.
Andy
2009/9/28 Kristof Jozsa <kristof.jozsa@xxxxxxxxx>:
> Sample code:
>
> public aspect WSPortFixerInterceptor {
> pointcut wsGetPortCall() :
> call(Object javax.xml.ws.Service+.getPort(..));
>
> Object around() : wsGetPortCall() {
> return WsClientTool.getInstance().fixWebServicePort(proceed()); //
> never mind this line
> }
>
>
> /** private inner class to verify correct interception */
> @SuppressWarnings("unused")
> private static class TestFixer {
> {
> new Service(null, null) {
>
> @SuppressWarnings("unused")
> public void boo() {
> super.getPort(null); // (1)
> getPort(null); // (2)
> }
> };
> }
> }
> }
>
> To my best knowledge, the two calls at (1) and (2) does the very same in
> Java, but appearently (2) gets intercepted by this aspect and (1) does not..
> what's the explanation for this behaviour?
>
> thanks,
> K
>
> _______________________________________________
> aspectj-users mailing list
> aspectj-users@xxxxxxxxxxx
> https://dev.eclipse.org/mailman/listinfo/aspectj-users
>
>