切入点格式不正确

时间:2011-12-12 12:16:46

标签: java spring pointcuts

此切入点的格式问题是什么?

@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");

    }

}

2 个答案:

答案 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)")