Из документации: Поддерживаемые указатели Pointcut
@ target: Пределы совпадения для точек соединения (выполнение методов при использовании Spring AOP), где находится класс исполняемого объекта имеет аннотацию заданного типа.
@ within: Ограничения, совпадающие с точками соединения внутри типов, имеющих данную аннотацию (выполнение методов, объявленных в типах с данной аннотацией при использовании Spring AOP).
Оба типа подсказок @target
и @within
предназначены для класса / типа.
Область действия pointcut является глобальной, и при запуске приложения оно пытается идентифицировать все классы / типы с аннотацией и создает помехи для нежелательных классов, здесь EmbeddedTomcat
related.
For @target
и @within
типы советов для работы, попробуйте сузить область, добавив обозначение области видимости следующим образом
@Before("@target(com.example.demo.aop.MethodInterceptAnnotation) && within(com.example.demo..*)")
Для меня сужение области всегда работало, но пришло по SO вопросы , где то тоже не помогло. В этом случае решение вашей проблемы доступно в этом ответе от @kriegaex.
Пожалуйста, go через ответ и комментарии, чтобы понять разницу при использовании @annotation
. Подводя итог, подсказки типов @target
и @within
, когда они используются, имеют тенденцию создавать прокси для всех классов, независимо от того, присутствует аннотация или нет на уровне класса.
Надеюсь, это поможет.