Если метод A вызывает метод B с @Transactional внутри того же класса — откроется ли транзакция?

Аннотация @Transactional, применённая к методу A, влияет на транзакционное поведение вызовов, которые проходят через прокси Spring.

Короткий ответ

Что ответить на собеседовании

Аннотация @Transactional, применённая к методу A, влияет на транзакционное поведение вызовов, которые проходят через прокси Spring. Если метод B вызывается внутри метода A через другой объект, который также управляется Spring и имеет соответствующие настройки, то транзакция, начатая в методе A, будет распространяться и на метод B.

Подробный разбор

Ответ с пояснениями

Аннотация @Transactional, применённая к методу A, влияет на транзакционное поведение вызовов, которые проходят через прокси Spring. Если метод B вызывается внутри метода A через другой объект, который также управляется Spring и имеет соответствующие настройки, то транзакция, начатая в методе A, будет распространяться и на метод B.

Однако, если метод B вызывается напрямую внутри метода A без использования Spring-прокси (например, вызов метода B того же объекта через this), то аннотация @Transactional на методе B не будет учитываться, так как Spring не перехватывает внутренние вызовы.

Таким образом, вызов метода B через другой объект, управляемый Spring, внутри метода A с @Transactional будет выполняться в рамках той же транзакции, если настройки прокси и контекста позволяют это.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее