Junior — Middle
Оё имкон дорад, ки дар Spring як компонентро амалӣ кард, ки ҳам ҳамчун синглтон ва ҳам ҳамчун прототип амал кунад, ва чӣ гуна инро кардан мумкин аст?
sobes.tech AI
Ҷавоб аз AI
Дар Spring, по подразбиране, биновете са сингълтони или прототипи, но не може едновременно да се обяви бина като и двете.
Въпреки това, може да се реализира сингълтон бина, който вътрешно създава нови екземпляри на прототип при заявка.
Как да го направите:
- Определете сингълтон бина (по подразбиране).
- Определете прототип бина.
- В сингълтон бина внедрете
ObjectProviderилиApplicationContext, за да получавате нови екземпляри на прототип при нужда.
Пример с ObjectProvider:
@Component
@Scope("singleton")
public class SingletonBean {
private final ObjectProvider<PrototypeBean> prototypeBeanProvider;
public SingletonBean(ObjectProvider<PrototypeBean> prototypeBeanProvider) {
this.prototypeBeanProvider = prototypeBeanProvider;
}
public void usePrototype() {
PrototypeBean prototype = prototypeBeanProvider.getObject();
prototype.doSomething();
}
}
@Component
@Scope("prototype")
public class PrototypeBean {
public void doSomething() {
System.out.println("Прототипен екземпляр: " + this);
}
}
По този начин, сингълтон бина може да създава и използва нови екземпляри на прототипа при всяко извикване.