В типичном жизненном цикле bean создаётся, получает зависимости, проходит post-processors и init callbacks, после чего может быть выдан как прокси. Spring AOP использует JDK dynamic proxy либо class-based CGLIB proxy.
Как устроены lifecycle bean и проксирование в Spring? Какие механизмы прокси используются?
В типичном жизненном цикле bean создаётся, получает зависимости, проходит post-processors и init callbacks, после чего может быть выдан как прокси. Spring AOP использует JDK dynamic proxy либо class-based CGLIB proxy.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
В типичном жизненном цикле bean создаётся, получает зависимости, проходит post-processors и init callbacks, после чего может быть выдан как прокси. Spring AOP использует JDK dynamic proxy либо class-based CGLIB proxy.
JDK proxy представляет интерфейсы, CGLIB создаёт подкласс; final-методы не перехватываются переопределением, private-вызовы также не становятся обычными proxy-вызовами. Точный порядок зависит от расширений контейнера, поэтому это не универсальная схема для каждого bean. Вызов через this обходит внешний прокси, а init callback обычно нельзя считать полноценным внешним AOP-вызовом. При закрытии контейнера вызываются поддерживаемые destroy callbacks.
Источник: github.com.