此切入点的格式问题是什么?
@Around("execution(* @myPackage.SafetyCritical.*(*))&& @annotation(deny)")
。我忘了添加:例外是“切入点格式不正确:期待'名称模式'(在&&之前的最后一个结束括号)
例如,切入点应该适用于这个类:
@SafetyCritical
public class SecureClass
{
public SecureClass(){
}
@Deny
public void isNotAllowed(){
System.out.println("This should not happen");
}
@Allow
public void isAllowed(){
System.out.println("Allowed");
}
}
答案 0 :(得分:1)
修改强> 的
我认为您正在寻找的切入点表达式更像是这样:
@Around("@target(myPackage.SafetyCritical) && @annotation(denyPackage.Deny)")
@target
指示符用于匹配使用给定的annoation标记的类,@annotation
指示符将过滤到使用denyPackage.Deny
注释注释的方法。
同样,浏览Spring Documentation regarding AspectJ support会很有帮助。
的 ORIGINAL:强> 的
要匹配任意数量的参数,传递给execution
切入点指示符的参数定义应为'..'
@Around("execution(* myPackage.SafetyCritical.*(..)) && @annotation(deny)")
Spring documentation有一些使用它来表示接受任意数量参数的例子。
另外,我冒昧地猜测在包名前面加上'@'符号是不可接受的。你应该删除它。
答案 1 :(得分:0)
我使用了这样的切入点定义来匹配带注释的方法:
@Around("execution(@myPackage.SafetyCritical * *(..)) && @annotation(deny)")
最后一部分@annotation(deny)
(就像你已经知道的那样,但其他一些可能没有)是将注释绑定到名为“deny”的通知方法参数。
编辑:根据您的更新,我不知道SafetyCritical是该类的注释。我想那将是目标()目标:
@Around("execution(* *(..)) && @target(myPackage.SafetyCritical) && @annotation(deny)")