Методы Spring AspectJ AOP не выполняются

#java #spring #spring-boot #aop #aspectj

Вопрос:

Я пытаюсь добавить некоторую логику предварительной обработки, используя AspectJ в моем проекте Spring MVC. У меня есть @Before метод и соответствующий точечный разрез на месте. Однако этот метод вообще не вызывается, когда я вызываю какой-либо из методов, соответствующих точечному разрезу.

Вот мои занятия:

 @Aspect
@Configuration
public class ConcurrencyAspectConfig {

    @Before("execution(public * com.test.wms.service.dto.PackingDtoApi.*(..))")
    public void adviceMethod(JoinPoint joinPoint) {
        System.out.println("**** ASPECT START");
    }

}
 
 @EnableAspectJAutoProxy
@Configuration
@ComponentScan({SpringConstants.PACKAGE_SPRING})
public class AppConfig {

}
 

При выполнении любого из открытых методов в PackingDtoApi я ожидаю увидеть **** ASPECT START сообщение на консоли. Однако, похоже, что метод советов никогда не вызывается. В чем может быть причина?

Комментарии:

1. Можете ли вы попробовать использовать аннотацию «@Компонент» вместо «@Конфигурация» для ConcurrencyAspectConfig?

2. @DragosGeornoiu тоже пытался @Component . Никакой помощи

3. Можете ли вы поделиться реализацией класса, который вы хотите создать? Spring может перехватывать только методы, основанные на интерфейсе…

4. @TabishMir — это PackingDtoApi весенняя фасоль ? не могли бы вы поделиться кодом, который вызывает общедоступные методы PackingDtoApi

5. Не видя полного кода , в первую очередь могут быть три причины . 1. PackingDtoApi не является бобом spring 2. вызов является внутренним вызовом метода 3. ConcurrencyAspectConfig не зарегистрирован как компонент. Для подтверждения поделитесь полным воспроизводимым тестовым случаем

Ответ №1:

В основном могут быть две причины, по которым ваша реализация не сработает:

  1. Неверное выражение точечного разреза — Дважды проверьте выражение точечного разреза
  2. PackingDtoApi не является весенним компонентом — Аннотируйте класс аннотацией стереотипа, например @Component

Примечание: Если это не решит вашу проблему, пожалуйста, поделитесь кодом для класса PackingDtoApi