Spring AOP совет с методом, а не @annotation: почему? - PullRequest
1 голос
/ 10 января 2020

Я ничего не понимаю с советами Spring. Существует два способа создания аспекта с двумя советами:

  • Мы можем создать пустой метод с аннотацией pointcut. Затем нам просто нужно создать методы с советом, который содержит пустое имя метода:
    @Component
    @Aspect
    public class TestAppli{

        private static final Logger LOGGER = LoggerFactory.getLogger(TestAppli.class);

        @Pointcut("@annotation(Loggable)")
        public void executeLogging(){
        }

        @Before("executeLogging()")
        public void method1(JoinPoint joinPoint){
            LOGGER.info("method 1 is called");
        }

        @Before("executeLogging()")
        public void method2(JoinPoint joinPoint){
            LOGGER.info("method 2 is called");
        }
    }
  • Мы можем напрямую создать два метода с помощью @Before ("@ annotation (Loggable) ") без использования пустого метода и его имени. Кажется, он выполняет те же операции (он также показывает текстовые данные в консоли):
    @Component
    @Aspect
    public class TestAppli {

        private static final Logger LOGGER = LoggerFactory.getLogger(TestAppli.class);

        @Before("@annotation(Loggable)") 
        public void method1(JoinPoint joinPoint){
            LOGGER.info("method 1 iscalled");
        }

        @Before("@annotation(Loggable)") 
        public void method2(JoinPoint joinPoint){
            LOGGER.info("method 2 is called");
        }   
    }

Пожалуйста, не могли бы вы объяснить, когда нужно использовать вторую операцию? Люди говорят, что это разрешает что-то, но я не понимаю, что это за штука.

Ответы [ 2 ]

0 голосов
/ 10 января 2020

Основные понятия c Spring AOP можно прочитать здесь

Совет : действие, предпринятое аспектом в определенной точке соединения

Pointcut : предикат, который соответствует точкам соединения.

С аннотированным методом @PointCut объявляется выражение pointcut для соответствия точке соединения.

Это имя метода может затем использоваться для связывания выражения pointcut с Advice .

Когда выражение pointcut записывается непосредственно с рекомендацией, оно называется «на месте». Выражение pointcut.

Насколько я знаю, при использовании выражений pointcut на месте различий нет. В то же время преимущество использования аннотированного метода @PointCut заключается в том, что мы можем объединить несколько различных таких методов, чтобы получить более читаемый совет.

Надеюсь, это поможет

0 голосов
/ 10 января 2020

Во-первых, вам необходимо понять основы того, что такое pointcut и рекомендации.

Во-вторых, эта конфигурация на основе аннотаций является просто способом настройки Аспектов. Так что не рассматривайте это как «пустой метод с аннотацией pointcut», но рассматривайте его как синтаксис определения pointcut с помощью аннотации.

Возвращаясь к вашему вопросу.

Оба они просто определяя некоторые предварительные советы. Вторым способом вы помещаете определение pointcut непосредственно в определение совета, в то время как первым способом вы даете имя pointcut и ссылаетесь на него в своих советах.

Право или -правильно, пока вы знаете, что делаете. Например, для очень простого и простого pointcut, который используется только в одном или двух советах, вы можете поместить его непосредственно в рекомендацию, как и во втором способе.

Однако обычно имеет смысл дать осмысленное имя для вашего pointcut и используйте его, ссылаясь на свои советы. Это придает значению c значение для вашего pointcut и облегчает его изменение в будущем.

...