Junior — Middle
Est-il possible de réaliser dans Spring un composant qui se comporte à la fois comme un singleton et comme un prototype, et comment le faire?
sobes.tech IA
Réponse de l'IA
Dans Spring, par défaut, les beans sont des singletons ou des prototypes, mais il n'est pas possible de déclarer un bean à la fois comme singleton et comme prototype.
Cependant, il est possible d'implémenter un bean singleton qui crée de nouvelles instances de prototype à la demande.
Comment faire :
- Définir un bean singleton (par défaut).
- Définir un bean prototype.
- Injecter dans le bean singleton un
ObjectProviderouApplicationContextpour obtenir de nouvelles instances du prototype selon le besoin.
Exemple avec 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("Instance prototype : " + this);
}
}
Ainsi, le bean singleton peut créer et utiliser de nouvelles instances du prototype à chaque appel.