Что проверяет вопрос про @Lookup в Spring
Prototype-бин, внедрённый как обычное поле в singleton, живёт ровно один раз — Spring резолвит зависимость один раз при создании singleton-бина, а не при каждом вызове метода.
@Lookup решает это иначе: Spring генерирует CGLIB-подкласс, где абстрактный или обычный метод переопределён так, что при каждом вызове достаёт из контекста новый экземпляр бина.
@Component public abstract class OrderProcessor {
public void process() { Worker worker = createWorker(); worker.doWork(); }
@Lookup protected abstract Worker createWorker(); }
Следом спросят: что будет, если класс или метод final. CGLIB не может создать подкласс для final — @Lookup молча не сработает, метод останется абстрактным вызовом без переопределения. Альтернатива без CGLIB — ObjectProvider, который резолвит бин из контекста явно, без прокси-магии.
Финал: @Lookup — это не аннотация-заглушка, а сигнал Spring сгенерировать код, которого вы не писали руками.
Тренажёр: 600 вопросов, мок с таймером, план повторов
senior·base — что спрашивают на самом деле
В этом посте были ссылки, но мы их удалили по правилам Сетки