Для proxy-based аннотаций Spring метод B должен вызываться через Spring-прокси. Практичный вариант — вынести B в отдельный bean и внедрить его в bean с методом A.
Есть Spring Bean с двумя методами A и B, над обоими аннотации. Как вызвать метод B из метода A, чтобы аннотации сработали?
Для proxy-based аннотаций Spring метод B должен вызываться через Spring-прокси. Практичный вариант — вынести B в отдельный bean и внедрить его в bean с методом A.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Для proxy-based аннотаций Spring метод B должен вызываться через Spring-прокси. Практичный вариант — вынести B в отдельный bean и внедрить его в bean с методом A.
Вызов this.B() обходит прокси, поэтому отдельные настройки @Transactional, @Async или @Cacheable не будут перехвачены таким способом. При этом уже открытая транзакция A может продолжать действовать: отсутствие нового перехвата не означает отсутствия любой транзакции. Проверьте конкретную аннотацию, включённую инфраструктуру и доступность метода для используемого типа прокси. Разделение ответственности обычно понятнее self-injection; AspectJ weaving имеет другую модель перехвата.
Источник: docs.spring.io.