我有这个界面:
public interface Performance {
public void perform();
}
由此类实现:
@Component
public class PerformanceImplementation implements Performance {
public void perform() {
System.out.println("PerformanceImplementation.perform()");
}
}
我想将以下方面应用于上述接口的方法,但仅当该方法在另一个包中执行时,所以我使用该包名称的within
指示符
@Aspect
public class Audience {
@Pointcut("execution(** concert.Performance.perform(..)) " +
"and within(asdasdasd.*)")
public void performance() {}
@Around("performance()")
public void watchPerformance(ProceedingJoinPoint jp) {
try {
System.out.println("Silencing cell phones");
System.out.println("Taking seats");
jp.proceed();
System.out.println("CLAP CLAP CLAP!!!");
} catch (Throwable e) {
System.out.println("Demanding a refund");
} }
}
如果我使用and
代替&&
,则无论如何都会触发方面,而且似乎没有考虑指定者的限制。
这有什么原因吗?
答案 0 :(得分:1)
这取决于您是在注释还是xml中使用它们。
切入点表达式可以使用'&&',' ||'和'!'
@Pointcut("anyPublicOperation() && inTrading()")
private void tradingOperation() {}
组合切入点子表达式时,'&&'在XML文档中很尴尬,因此关键字'和','或'而且'不是'可用来代替'&&&#;;' ||'和'!'分别。例如,之前的切入点可能更好地写为:
<aop:pointcut id="businessService"
expression="execution(* com.xyz.myapp.service.*.*(..)) **and** this(service)"/>