1

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

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

    }

}
4

2 回答 2

1

编辑:

我认为您正在寻找的切入点表达式会更像这样:

@Around("@target(myPackage.SafetyCritical) && @annotation(denyPackage.Deny)")

指示符用于匹配使用给定注释标记的@target类,@annotation指示符将过滤到使用注释denyPackage.Deny注释的方法。

同样,查看有关 AspectJ 支持的 Spring 文档会很有帮助。

原来的:

要匹配任意数量的参数,传递给execution切入点指示符的参数定义应该是“..”

@Around("execution(* myPackage.SafetyCritical.*(..)) && @annotation(deny)")

Spring 文档中有一些使用 this 表示接受任意数量参数的示例。

另外,我冒昧地猜测,在您的包名称前带有“@”符号是不可接受的。你应该删除它。

于 2011-12-12T12:20:22.073 回答
0

我使用了这样的切入点定义来匹配带注释的方法:

@Around("execution(@myPackage.SafetyCritical * *(..)) && @annotation(deny)")

最后一部分@annotation(deny)(就像您已经知道的那样,但有些人可能不知道)是将注释绑定到名为“deny”的建议方法参数。

编辑:根据您的更新,我不知道 SafetyCritical 是课堂上的注释。我想那将是目标()目标:

@Around("execution(* *(..)) && @target(myPackage.SafetyCritical) && @annotation(deny)")
于 2011-12-12T12:38:55.157 回答