Перейти к содержимому
Spring

Почему @Transactional не срабатывает в конструкторе или @PostConstruct?

В этот момент Spring ещё работает с исходным объектом, а AOP-proxy обычно появляется позже в lifecycle Bean-а.

Senior26 августа 2026 г.
CoreDI

Конструктор, injection и @PostConstruct выполняются при создании исходного bean. Обработчик AOP может обернуть его в proxy только после этих шагов, поэтому вызов метода через this в ранней фазе не проходит через interceptor chain транзакций.

Инициализацию, которой действительно нужна транзакция, лучше запускать после готовности context через отдельный bean и обычный вызов через proxy. Тот же принцип объясняет, почему self-invocation обходит @Transactional и другие AOP-аннотации.

Подробнее: Как Spring создаёт Bean: от BeanDefinition до Proxy.

← Все вопросы и ответы