Junior — Middle
¿Es posible implementar en Spring un componente que actúe tanto como un singleton como un prototipo, y cómo hacerlo?
sobes.tech AI
Respuesta de la IA
En Spring, por defecto, los beans son singltones o prototipos, pero no se puede declarar un bean como ambos al mismo tiempo.
Sin embargo, es posible implementar un bean singleton que cree nuevas instancias de un prototipo bajo demanda.
¿ Cómo hacerlo?
- Definir un bean singleton (por defecto).
- Definir un bean prototipo.
- Inyectar en el bean singleton un
ObjectProvideroApplicationContextpara obtener nuevas instancias del prototipo cuando sea necesario.
Ejemplo con 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("Instancia prototipo: " + this);
}
}
De esta manera, el bean singleton puede crear y usar nuevas instancias del prototipo en cada llamada.