Пользовательская аннотация работает только для ElementType.METHOD - PullRequest
0 голосов
/ 20 февраля 2019

Я практикуюсь с таможенными аннотациями, и я хочу создать пользовательскую аннотацию, которая устанавливает значение Math.random () в поле @Entity (я знаю, что я могу сделать это в конструкторе, но я хочу сделать саннотация)

  1. Моя аннотация:

    @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.CONSTRUCTOR) public @interface SetRandomPin {}

2.Мой аспект

@Around("@annotation(com.testingAnnotations.annotattions.SetRandomPin)")
            public void setUserPin(ProceedingJoinPoint joinPoint) throws NoSuchMethodException {....}
}

В моем @Entity, когда я помещаю @SetRandomPin в конструктор, метод setUserPin не запускается.

Только если я перехожу на ElementType.METHOD и перемещаю аннотацию в класс UserService.class, метод запускается.

Я застрял здесь и не могу понять, почему работает с ElmentType, а не с другим.

1 Ответ

0 голосов
/ 20 февраля 2019

По умолчанию Spring AOP не предлагает перехват конструктора или частные / защищенные методы.Вы можете сделать это с помощью AspectJ.

Из документов

Если для перехвата требуются вызовы методов или даже конструкторы в целевом классе, рассмотрите возможность использования собственного AspectJ-ткачества, управляемого Spring, вместоОснованная на прокси AOP среда Spring.

...