Junior — Middle
Hány prototípus bean kerül injektálásra egy singleton bean-be Springben?
sobes.tech MI
Válasz az MI-től
В Spring, если singleton бин внедряет prototype бин напрямую через обычное автосвязывание, то prototype бин создаётся один раз при создании singleton бина и используется повторно — то есть фактически внедряется один экземпляр prototype бина.
Чтобы получить новый экземпляр prototype бина при каждом вызове, нужно использовать специальные механизмы, например:
ObjectFactoryилиProviderдля запроса нового экземпляра- метод с аннотацией
@Lookup
Пример с ObjectFactory:
@Component
public class SingletonBean {
@Autowired
private ObjectFactory<PrototypeBean> prototypeBeanFactory;
public void doSomething() {
PrototypeBean prototypeBean = prototypeBeanFactory.getObject();
prototypeBean.action();
}
}
Таким образом, количество внедряемых prototype бинов в singleton бин зависит от способа внедрения: при прямом внедрении — один экземпляр, при использовании фабрики — сколько угодно новых экземпляров по запросу.