Ответ
Ответ: Один раз.
Причина: Singleton Bean инициализируется контейнером Spring один раз при старте контекста. Все его зависимости (включая Prototype Bean) инжектируются на этапе создания, поэтому экземпляр Prototype также создается единожды и используется повторно. Это противоречит семантике scope prototype.
Решение (как получать новый экземпляр при каждом обращении):
-
Использование
ObjectProvider<T>(рекомендуется):@Component public class SingletonBean { @Autowired private ObjectProvider<PrototypeBean> prototypeProvider; public PrototypeBean getPrototypeInstance() { return prototypeProvider.getObject(); // Новый экземпляр при каждом вызове } } - Метод, помеченный
@Lookup:@Component public abstract class SingletonBean { public abstract PrototypeBean getPrototypeInstance(); } - Внедрение
ApplicationContextи вызовgetBean(): Менее предпочтительно из-за связывания с API контейнера.