#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:
В основном могут быть две причины, по которым ваша реализация не сработает:
- Неверное выражение точечного разреза — Дважды проверьте выражение точечного разреза
- PackingDtoApi не является весенним компонентом — Аннотируйте класс аннотацией стереотипа, например
@Component
Примечание: Если это не решит вашу проблему, пожалуйста, поделитесь кодом для класса PackingDtoApi