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

Будут ли работать конструкции с приватным методом, помеченным @Transactional

Приватные методы в Spring не поддерживают транзакционность через @Transactional, так как Spring использует AOP-проксирование. Прокси не может перехватить вызов приватного метода, так как он доступен только внутри класса. Для работы транзакций метод должен быть как минимум package-private (default) или выше (protected, public).

java
@Service
public class UserService {
    
    @Transactional // не сработает!
    private void privateMethod() {
        // логика с транзакцией
    }

    @Transactional // сработает
    public void publicMethod() {
        privateMethod(); // транзакция не применится
    }
}

Если нужна транзакционность, используйте публичные/защищённые методы или self-injection через @Autowired (но это антипаттерн).

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

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

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

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