Pointcut не очень хорошо отформатирован - PullRequest
1 голос
/ 12 декабря 2011

В чем проблема формата с этим pointcut?

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

.i забыл добавить: исключение: «Pointcut не правильно сформирован: ожидается« шаблон имени »(последняя закрывающая скобка перед &&)

для примера pointcut должен работать с этим классом:

@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 ]

1 голос
/ 12 декабря 2011

РЕДАКТИРОВАТЬ:

Я думаю, что выражение pointcut, которое вы ищете, будет выглядеть примерно так:

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

@target Обозначение * используется для сопоставления классов, помеченных данной аннотацией, а указатель @annotation отфильтрует методы, аннотированные аннотацией denyPackage.Deny.

Опять же, посмотрите на SpringБудет полезна документация, касающаяся поддержки AspectJ .

ORIGINAL:

Чтобы соответствовать любому количеству аргументов, определение параметров передается вexecution обозначение точки резки должно быть '..'

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

В документации Spring есть несколько примеров использования этого для обозначения принятия любого количества аргументов.

Кроме того, я бы рискнул предположить, что наличие символа «@» перед именем вашего пакета недопустимо.Вы должны удалить его.

0 голосов
/ 12 декабря 2011

Я использовал определение pointcut, подобное этому, для сопоставления с аннотированными методами:

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

Последняя часть @annotation(deny) (как вы уже знаете, но некоторые другие могут этого не делать) - это привязка аннотации каргумент метода совета с именем "deny".

Редактировать: Согласно вашему обновлению, я не знал, что SafetyCritical был аннотацией для класса.Я полагаю, что это будет цель target () тогда:

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