Встречается на собеседованиях • сегодня
Какие знаешь особенности проксирования Transactional при работе с несколькими методами в рамках одного Bean в Spring
При проксировании @Transactional в Spring есть несколько ключевых особенностей:
- 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() {}-
Порядок аннотаций – если метод вызывается из другого метода с
@Transactional, применяются правила вложенности (например,REQUIRES_NEWсоздаст новую транзакцию). -
Режим проксирования – по умолчанию Spring использует JDK dynamic proxies (только для интерфейсов) или CGLIB (для классов). Важно учитывать при наследовании.
Для обхода self-invocation можно:
- Использовать
AopContext.currentProxy() - Инжектировать сам бин через
@Autowired - Вынести метод в отдельный бин

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