Два почти идентичных аспекта вызывают странную проблему - PullRequest
0 голосов
/ 11 октября 2019

Я использую aspectj и у меня определены два почти идентичных аспекта, первый работает просто отлично, если второй сбой при компиляции, как показано ниже:

[WARNING] advice defined in com...RolesAspect has not been applied [Xlint:adviceDidNotMatch]

Первый аспект:

@Aspect
public class RoleAspect {

    @Before("requireRolePointcut(requireRole)")
    public void requireRole(JoinPoint joinPoint, RequireRole requireRole) throws Throwable {
        //TODO
    }

    @Pointcut("@annotation(requireRole)")
    public void requireRolePointcut(RequireRole requireRole) {
    }
}

Второй аспект:

@Aspect
public class RolesAspect {

    @Before("requireRolesPointcut(requireRoles)")
    public void requireRoles(JoinPoint joinPoint, RequireRoles requireRoles) throws Throwable {
        //TODO
    }

    @Pointcut("@annotation(requireRoles)")
    public void requireRolesPointcut(RequireRoles requireRoles) {
    }
}

Аннотация RequireRole:

@Retention(RetentionPolicy.RUNTIME)
@Target(value={ElementType.METHOD})
public @interface RequireRole {
    String value();
}

Аннотация RequireRoles:

@Retention(RetentionPolicy.RUNTIME)
@Target(value={ElementType.METHOD})
public @interface RequireRoles {
    String[] value();
}

Любая помощь действительно приветствуется. Я пробовал много разных аннотаций, но вторая всегда терпит неудачу, поэтому должно быть что-то, возможно, с этим.

1 Ответ

0 голосов
/ 18 октября 2019

Аспект не терпит неудачу , вы видите только предупреждение компилятора AspectJ о том, что pointcut не соответствует .

К сожалению, вы не показываете

  • ваш полный код аспекта
  • , а также без целевого класса (классов) с именами пакетов (!).
  • То же самое касается ваших аннотаций: без имен пакетов.

Т.е. вы пропустили информацию, необходимую для анализа вашей проблемы.

Таким образом, на данный момент я могу только сказать вам, чтобы исправить ваше pointcut, чтобы оно соответствовало тому, что вы хотитеперехватить - или отредактируйте свой вопрос, чтобы показать его мне и уведомить меня с комментарием. Затем я могу взглянуть еще раз и дать более конкретные подсказки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...