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

Что будет при @Transactional компоненте с private методом

В Spring @Transactional над private-методом не будет работать, так как Spring использует AOP-прокси для реализации транзакций. Прокси не может перехватывать вызовы private-методов из-за ограничений Java.

Пример:

java
@Service
public class UserService {
    @Transactional
    private void updateUser() { // Не сработает!
        // Логика обновления
    }
}

Решение:

  1. Сделать метод public или protected
  2. Использовать self-injection (@Autowired самого себя) и вызывать метод через него
  3. Применить AspectJ с compile-time weaving (но это сложнее)

Лучшая практика — всегда делать транзакционные методы public.

Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

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

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

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