Вопрос проверяет понимание декларативного управления транзакциями и того, как Spring обеспечивает атомарность операций с данными.
@Transactional — это аннотация для управления транзакциями декларативно. Spring оборачивает вызов метода в транзакцию автоматически. Под капотом используется AOP и прокси. Фактическое управление транзакцией делегируется PlatformTransactionManager. Разработчик описывает правила, а не пишет код транзакций вручную.
Spring старается скрыть низкоуровневую работу с транзакциями и дать разработчику простой и безопасный API.
@Transactional — аннотация Spring, которая определяет границы транзакции и правила её поведения при выполнении метода.
@TransactionalМеханизм основан на прокси и AOP.
Spring создаёт прокси для бина
Вызов метода проходит через прокси
Прокси:
открывает транзакцию
вызывает целевой метод
коммитит или делает rollback
AOP
перехват вызова метода
PlatformTransactionManager
управляет транзакцией
реализация зависит от технологии (JPA, JDBC)
Thread-bound context
транзакция привязана к потоку
По умолчанию:
Rollback при RuntimeException
Commit при успешном выполнении
Можно переопределить:
@Transactional(rollbackFor = Exception.class)
Не работает при вызове метода внутри того же класса
Работает только через Spring-контейнер
Зависит от корректной настройки transaction manager
@Transactional — это декларативный способ управления транзакциями. Spring реализует его через прокси и AOP, избавляя от ручного контроля.