Выбор ответа Junior AOP и прокси спрашивают часто обновлено
@Transactional на private-методе
Вопрос
Что произойдёт с @Transactional private void save()?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Аннотация проигнорируется: прокси не перехватит private. CGLIB-прокси это подкласс, а private-метод подклассу не виден и не переопределяется.
Варианты ответа
- Транзакция откроется так же, как для public-метода
- Аннотация проигнорируется: прокси не перехватит privateправильный ответ
- Ошибка компиляции: аннотация недопустима для private-метода
- Spring сделает метод public через рефлексию при старте
Разбор
CGLIB-прокси это подкласс, а private-метод подклассу не виден и не переопределяется. JDK-прокси видит только методы интерфейса. Компилятор не знает семантики аннотации, поэтому ошибки нет, а Spring ничего не меняет в модификаторах. Итог: тихий отказ, который находят только по отсутствию отката.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.