Что проверяет вопрос про @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 — что спрашивают на самом деле


В этом посте были ссылки, но мы их удалили по правилам Сетки