我有两个方面要进行一些验证。这些方面拦截了使用@NotNull
和@IsUnique
注释注释的所有方法。例如:
@NotNull
@IsUnique
public void save(Player p){
// persisting
}
方面:
public aspect NotNullInterceptor{
pointcut NotNull(): execution(public * (@NotNull *).*(..));
before() : NotNull() {
//Validation and handling
}
}
public aspect IsUniqueInterceptor{
pointcut IsUnuque(): execution(public * (@IsUnique *).*(..));
before() : IsUnuque() {
//Validation and handling
}
}
问题是我需要在NotNull
验证之前严格执行IsUnique
验证,以避免抛出NullPointerException
。
如果我在@NotNull
注释之前添加@IsUnique
注释,它是否可靠?
答案 0 :(得分:1)
没有。切入点是一个布尔函数,用于确定方面是否适用。它不会影响方面的排序。而且,通常不可能从切入点表达式推断出这种排序。例如,考虑:
@First
@Second
@Third
void foo();
和切入点表达式:
execution(public * (@First *).*(..)) && execution(public * (@Third *).*(..));
execution(public * (@Second *).*(..));
第一个切入点应该先匹配,因为@First
位于@Second
之前,还是最后一位因为@Third
位于@Second
之后?