параметр метода aspectj не работает при загрузке пружины - PullRequest
0 голосов
/ 05 января 2019

Я создал аннотацию с именем Validation и внедрил ее в параметр метода, и я использовал аспект перед вызовом для проверки моего объекта. Не работает

Код аннотации

@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
public @interface Validation {}

AOP код

@Aspect
@Component
public class ValidatorAOP {
    @Before("valditionAnnotation()")
    public void validate(final JoinPoint jp) throws Throwable {
        Validator object = (Validator) jp.getTarget();
        object.validator();
    }
    @Pointcut("@annotation(Validation)")
    public void valditionAnnotation() {
    }
}

Использование аннотации как public TrackingId createNewOrder(@Validation Order newOrder)

1 Ответ

0 голосов
/ 05 января 2019

Это вызывается перед любым методом, аргумент которого помечен @Validation, я думаю, это то, что вы хотели:

@Before("execution(* *(.., @Validation (*), ..)) && args(.., toVerify)")
public void validate(final JoinPoint joinPoint, final Object toVerify) {

}

Если вам не нужно значение параметра, просто удалите аргумент && ... part и method.

@Before("execution(* *(.., @Validation (*), ..)) && args(.., toVerify)")
  |          |     | |  |     |         |   |    |   |    |      |
  1          2     3 4  5     6         7   8    9   10   11     12
  1. совет называется до точка соединения
  2. метод сопоставления выполнение точка соединения
  3. видимость метода , соответствует любому (общедоступный, частный и т. Д.)
  4. имя метода , соответствующее любому
  5. в случае, если ваш аргумент не единственный, он может быть между другими аргументами (не помечены @Validation)
  6. аннотация , которую вы ищете
  7. типы аргументов для аннотации
  8. см. 5.
  9. до объединить выражения
  10. сделать аргумент доступным для вашего метода
  11. как в 5 и 8, это может быть не первый аргумент
  12. имя аргумента , такое же, как в сигнатуре метода (Object toVerify)

Будьте осторожны, если у вас есть методы с несколькими параметрами, некоторые аннотированные, некоторые нет, и другие комбинации - не уверен, что это всегда будет работать.

...