AspectJ - 从子句中排除内部 类
AspectJ - exclude inner classes from within clause
我有一个有多个实现的标记接口。我的意图是为实现该标记接口的任何 class 中定义的所有 public 方法添加一个方面。
我定义我的方面如下:
@Around("within(x.y.z.MyInterface+) && execution(public * *(..))")
问题是这也会捕获内部 classes,例如考虑在实现该接口的 classes 之一中使用此方法:
public void foo() {
doSomething(new Request() {
@Override
public void do() {
System.out.println("Hi");
}
});
}
出于某种原因,方面也捕获了 "do()" 方法,即使它不是从 MyInterface 继承的。
我应该如何修正方面定义?
而不是 "within"
使用 "this"
切入点:
@Around("this(x.y.z.MyInterface+) && execution(public * *(..))")
基本上 "this"
匹配连接点,其中 this,当时的当前对象引用,是 MyInterface 的一个实例。未实现您的接口的匿名 类 将不再匹配。
JavaWorld 上有一篇不错的文章:
http://www.javaworld.com/article/2074048/core-java/i-want-my-aop---part-2.html?page=2
我有一个有多个实现的标记接口。我的意图是为实现该标记接口的任何 class 中定义的所有 public 方法添加一个方面。 我定义我的方面如下:
@Around("within(x.y.z.MyInterface+) && execution(public * *(..))")
问题是这也会捕获内部 classes,例如考虑在实现该接口的 classes 之一中使用此方法:
public void foo() {
doSomething(new Request() {
@Override
public void do() {
System.out.println("Hi");
}
});
}
出于某种原因,方面也捕获了 "do()" 方法,即使它不是从 MyInterface 继承的。
我应该如何修正方面定义?
而不是 "within"
使用 "this"
切入点:
@Around("this(x.y.z.MyInterface+) && execution(public * *(..))")
基本上 "this"
匹配连接点,其中 this,当时的当前对象引用,是 MyInterface 的一个实例。未实现您的接口的匿名 类 将不再匹配。
JavaWorld 上有一篇不错的文章: http://www.javaworld.com/article/2074048/core-java/i-want-my-aop---part-2.html?page=2