Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Spring: transaction, propagation

Как меняется поведение транзакций при вызове методов между разными классами?

Вопрос проверяет понимание того, когда транзакции в Spring действительно работают и как правильно выстраивать границы сервисов.

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

При вызове метода между разными бинами вызов проходит через прокси. В этом случае @Transactional отрабатывает корректно. Spring создаёт или присоединяет транзакцию в зависимости от настроек propagation. Именно так транзакции и должны использоваться в типовой архитектуре. Поэтому транзакционные методы обычно выносят в отдельные сервисы.

Длинный ответ

Взаимодействие между разными классами — это «правильный» сценарий работы транзакций в Spring.

Как это работает

1) Вызов через прокси

Когда один бин вызывает метод другого бина:

  1. Spring подставляет прокси вместо реального объекта

  2. Вызов перехватывается

  3. Транзакционная логика применяется

Пример типовой схемы

@Service
public class OrderService {

    private final PaymentService paymentService;

    public OrderService(PaymentService paymentService) {
        this.paymentService = paymentService;
    }

    public void createOrder() {
        paymentService.pay();
    }
}

@Service
public class PaymentService {

    @Transactional
    public void pay() {
        // транзакция будет создана
    }
}

Влияние propagation

Поведение транзакций зависит от propagation.

1) REQUIRED (по умолчанию)

  1. Если транзакция уже есть — используется она

  2. Если нет — создаётся новая

2) REQUIRES_NEW

  1. Всегда создаётся новая транзакция

  2. Внешняя приостанавливается

3) Другие режимы

Используются реже и для специфических сценариев.

Архитектурный смысл

  1. Транзакции определяют границы бизнес-операций

  2. Эти границы чаще всего совпадают с сервисами

  3. Это упрощает понимание и поддержку кода

Краткий вывод

При вызове методов между разными классами транзакции в Spring работают корректно, так как вызов проходит через прокси и учитывает правила propagation.

Уровень

  • Рейтинг:

    5

  • Сложность:

    6

Навыки

  • Spring

    Spring

Ключевые слова

#transaction

#propagation

Подпишись на Java Developer в телеграм