Junior — Middle
Ist es möglich, in Spring eine Komponente zu implementieren, die sowohl als Singleton als auch als Prototyp fungiert, und wie man das macht?
sobes.tech KI
Antwort von AI
In Spring sind Beans standardmäßig Singletons oder Prototypen, aber man kann nicht gleichzeitig ein Bean als beides deklarieren.
Es ist jedoch möglich, ein Singleton-Bean zu implementieren, das bei Bedarf neue Instanzen eines Prototyps erstellt.
So geht's:
- Definieren Sie ein Singleton-Bean (Standard).
- Definieren Sie ein Prototyp-Bean.
- Injizieren Sie in das Singleton-Bean einen
ObjectProvideroderApplicationContext, um bei Bedarf neue Prototyp-Instanzen zu erhalten.
Beispiel mit 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("Prototyp-Instanz: " + this);
}
}
Auf diese Weise kann das Singleton-Bean bei jedem Aufruf neue Prototyp-Instanzen erstellen und verwenden.