Wie lassen Sie den Frühling initialisieren "Prototyp" Bohnen nur, wenn Sie bekam durch getBean()?
Sehe ich, dass es initialisiert Prototyp Bohnen auf der ersten Inbetriebnahme. Wie dies zu verhindern ?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist nicht wahr, Prototyp-scoped beans sind nicht initialisiert beim Start, es sei denn, etwas anderes hat einen Verweis auf Sie.
Wenn Sie feststellen, dass dies der Fall ist, dann müssen Sie einen Verweis von einem singleton bean zu einem Prototyp Bohne, und die Initialisierung des singleton-bean ist die Auslösung der Erstellung des Prototyps.
Als Skaffman sagt in seinem post, Prototyp Bohnen sind nicht initialisiert beim Start.
Sogar das prototype-bean konfiguriert ist mit lazy-init auf false gesetzt ist nicht erstellt, bevor die
ApplicationContext.getBean(..)
- Methode ausgeführt wird.Es ist nur ein debug-log-Nachricht zu Ihrem bean Konstruktor oder starten Sie Ihren debugger, dann siehst du es selbst.
Wenn Sie erhalten, Ihre Prototyp-bean so:
Dann ist es absolut keine chance, dass es initialisiert wird bei container-Start.
Wenn Sie immer noch Probleme mit der Spannung Initialisierung der bean mit den Prototyp-Rahmen, ich schlage vor, Sie zeigen den code, der im zusammenspiel mit dem Spring-container und die Spring-Konfiguration.
Einer situation, wo der prototype-bean initialisiert wird, wenn der container gestartet (so lange wie deine Bohne ist nicht konfiguriert
lazy-init="true"
):Wenn eine singleton-bean hat eine prototype-bean-Abhängigkeit der prototype-bean initialisiert wird zusammen mit der singleton-bean.
Ein weiterer Nebeneffekt mit dem abrufen der demo-Objekt durch die singletonBean ist, dass Sie nur ein demo-Objekt, egal wie viele Male, die Sie ausführen, die
context.getBean(SingletonBean.class);
Methode.