Спросят с вероятностью 12%
Аннотация
@Transactional предоставляет мощный и гибкий способ управления транзакциями приложениях. Используя эту аннотацию, разработчики могут декларативно управлять границами транзакций на уровне классов или методов, не заботясь о низкоуровневых операциях управления транзакциями. Вот как он работает:1️⃣ Прокси
При старте приложения он сканирует компоненты на предмет наличия аннотации
@Transactional и создаёт для них прокси-объекты. Эти прокси используются для перехвата вызовов к методам, отмеченным аннотацией. В зависимости от настроек, прокси может быть основан на JDK динамических прокси (для интерфейсов) или на CGLIB прокси (для классов).2️⃣ Перехват вызовов
Когда вызывается метод, отмеченный
@Transactional, прокси перехватывает этот вызов и начинает управление транзакцией. Если транзакция уже существует, он решает, присоединиться к этой транзакции или создать новую, основываясь на атрибутах аннотации (например, propagation).3️⃣ Управление транзакцией
Делегирует управление транзакцией менеджеру транзакций (
PlatformTransactionManager), специфичному для используемой технологии доступа к данным (JPA, JDBC, Hibernate и т.д.). Менеджер транзакций отвечает за начало, коммит и откат транзакции.4️⃣ Исполнение бизнес-логики
После начала транзакции прокси вызывает оригинальный метод. Если метод выполняется без исключений, прокси сообщает менеджеру транзакций о необходимости зафиксировать транзакцию. В случае возникновения исключения, прокси сообщает менеджеру транзакций о необходимости её отката.
5️⃣ Атрибуты аннотации
Аннотация
@Transactional позволяет настраивать различные аспекты управления транзакцией, включая:-
propagation — правила распространения транзакций;-
isolation — уровень изоляции транзакции;-
readOnly — указывает, является ли транзакция только для чтения;-
timeout — максимальное время выполнения транзакции;-
rollbackFor и noRollbackFor — классы исключений, при которых транзакция должна быть откачена или не откачена.Аннотация
@Transactional упрощает управление транзакциями, позволяя разработчикам фокусироваться на бизнес-логике, в то время как Spring заботится о транзакционной границе и корректном управлении транзакциями "под капотом". Важно правильно настраивать атрибуты аннотации и понимать механизмы работы транзакций, чтобы обеспечить надёжность и производительность приложения.➡️ Примеры ответов
➡️ Список всех вопросов на Java Developer
🧩 Идущий | 🔐 Собесы | 🔐 Тестовые