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.