Spring middle

Что такое self-invocation?

Ответ

this.method() минует прокси → @Transactional/@Async/@Cacheable не работают. Решения: вынести метод в другой бин (рекомендуемый), инжектить self через @Lazy или ObjectProvider, использовать AspectJ compile-time weaving.

Разбор: Self-invocation — это вызов метода того же бина через this, который идёт напрямую в объект, минуя прокси Spring AOP, поэтому аннотации вроде @Transactional, @Async, @Cacheable не срабатывают. Ловушка в том, что многие думают, будто прокси перехватывает любой вызов метода; на деле он работает только для внешних вызовов через ссылку на бин. Корректное решение — вынести метод в отдельный бин либо инжектить self через @Lazy/ObjectProvider или включить AspectJ weaving.

Хочешь так же по своей компании — с вопросами по грейдам и задачами? Закажи гайд или забери свежее в Telegram.

Заказать гайд Пройти тест
новые гайды и свежие вопросы с собесов — первыми в Telegram Смотреть гайды Подписаться