Встречается на собеседованиях • сегодня

Какие знаешь особенности проксирования Transactional при работе с несколькими методами в рамках одного Bean в Spring

При проксировании @Transactional в Spring есть несколько ключевых особенностей:

  1. Self-invocation – вызов метода внутри того же бина не будет проксироваться. Транзакция не откроется:
java
public class Service {
    @Transactional
    public void methodA() {
        methodB(); // Не будет транзакции!
    }
text
@Transactional
public void methodB() {}

}

text

2. **Propagation** – настройки распространения транзакций (`REQUIRED`, `REQUIRES_NEW` и др.) работают только через прокси:
```java
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void methodC() {}
  1. Порядок аннотаций – если метод вызывается из другого метода с @Transactional, применяются правила вложенности (например, REQUIRES_NEW создаст новую транзакцию).

  2. Режим проксирования – по умолчанию Spring использует JDK dynamic proxies (только для интерфейсов) или CGLIB (для классов). Важно учитывать при наследовании.

Для обхода self-invocation можно:

  • Использовать AopContext.currentProxy()
  • Инжектировать сам бин через @Autowired
  • Вынести метод в отдельный бин
Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы