Класс объявляет @Transactional
для себя или своих членов, Spring создает прокси, который реализует тот же интерфейс (ы), что и класс, который вы аннотируете.Другими словами, Spring оборачивает компонент в прокси, и сам компонент не знает об этом .
Прокси-сервер предоставляет Spring способ внедрить поведение до, после или вокруг вызовов методов в прокси-объекте.
Внутренне это то же самое, что и совет по транзакциям (с использованием AOP)где прокси создается первым и вызывается до / после метода целевого компонента.
Сгенерированный прокси-объект снабжен TransactionInterceptor
, который создается Spring.Поэтому, когда метод @Transactional
вызывается из клиентского кода, TransactionInterceptor
сначала вызывается из прокси-объекта, который начинает транзакцию и в конечном итоге вызывает метод для целевого компонента.Когда вызов заканчивается, TransactionInterceptor
фиксирует / откатывает транзакцию соответственно