Встречается на собеседованиях • сегодня
Что произойдет при вызове методом без @Transactional метода с @Transactional
При вызове метода без @Transactional метода с @Transactional поведение зависит от контекста:
- Если вызывается метод внутри одного класса - аннотация
@Transactionalне сработает, так как Spring AOP использует проксирование, а самовызовы не проходят через прокси. Транзакция не будет создана.
java
@Service
public class MyService {
public void outerMethod() {
innerMethod(); // транзакция НЕ создастся
}
@Transactional
public void innerMethod() {
// работа с БД
}
}- Если вызов идет между разными бинами - транзакция создастся нормально, так как вызов идет через Spring Proxy.
java
@Service
public class ServiceA {
private final ServiceB serviceB;
public void outerMethod() {
serviceB.innerMethod(); // транзакция создастся
}
}
@Service
public class ServiceB {
@Transactional
public void innerMethod() {
// работа с БД
}
}Для корректной работы транзакций внутри одного класса можно:
- Вынести транзакционный метод в отдельный сервис
- Использовать
selfинъекцию через@Autowired - Использовать
TransactionTemplateпрограммное управление транзакциями

Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
офферы быстрее!
Попробовать бесплатно
Следующий вопрос
Это единственный вопрос по вашему фильтру
как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы