Junior — Middle
É possível implementar no Spring um componente que funcione tanto como um singleton quanto como um protótipo, e como fazer isso?
sobes.tech IA
Resposta da IA
No Spring, por padrão, os beans são singletons ou protótipos, mas não é possível declarar um bean como ambos ao mesmo tempo.
No entanto, é possível implementar um bean singleton que cria novas instâncias de protótipo sob demanda.
Como fazer:
- Definir um bean singleton (padrão).
- Definir um bean protótipo.
- Injetar no bean singleton um
ObjectProviderouApplicationContextpara obter novas instâncias do protótipo conforme necessário.
Exemplo com 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("Instância protótipo: " + this);
}
}
Dessa forma, o bean singleton pode criar e usar novas instâncias do protótipo a cada chamada.