Wofür wird der Prototyp Spring Bean verwendet?

8

Standardmäßig ist das von Spring erstellte Bean Singleton. Sie sind Thread-sicher, weil sie staatenlos sind. Wenn Spring eine statusbehaftete Bean erstellen soll, müssen wir den Prototypbereich für die Bean-Definition verwenden. Wir müssen uns um die Thread-sicheren Probleme kümmern. Alle Staatenlosen Bohnen werden verschmutzt, wenn sie von der Prototypbohne injiziert werden. Also, ich kann mir nicht vorstellen, wo wir den Prototypbereich verwenden können. Kannst du ein typisches Szenario geben, dass wir Spring Bean benutzen können / müssen? Wie können wir auch die staubrige Verschmutzung anderer Singleton-Bohnen zunichte machen?

    
Jacky 13.05.2012, 09:52
quelle

2 Antworten

13

Es gibt viele Gründe, den Prototypbereich zu verwenden, z. B. wenn Sie "neu" anstelle von Singleton verwenden. Eine Bean pro Benutzer, eine Bean pro Request, eine Sammlung eindeutiger Beans usw. Verwenden Sie in Nicht-Trivial-Anwendungen schließlich nicht mehr Singles als Singles?

Singleton-beschränkte Beans sind nicht threadsicher, nur weil sie Singletons sind - sie müssen geschrieben werden um threadsicher zu sein. Sie werden nicht magisch fadensicher. Der Umfang eines Beans ist genau das, sein Umfang: Er macht die Bean nicht passend für den bestimmten Bereich - das liegt beim Entwickler.

    
Dave Newton 13.05.2012, 10:36
quelle
1

Ich halte prototypische Scoped-Beans als Alternative zu Factory-Klassen, die zum Erstellen von Objekten verwendet werden. Der Unterschied ist im Falle von Prototyp Bohnen Frühling wird sparen Sie einige Code für die Abhängigkeit Injektion und wird auch automatisch Ihre Objekte für Transaktionen etc. wenn angemessen.

Ich selbst bevorzuge den Fabrikansatz. Ein vernünftiges Szenario für den Prototypumfang, dem ich begegnete, war ein zustandsbehaftetes Objekt, das von verschiedenen bekannten Beans benötigt wurde und jeder eine eigene Kopie benötigte. Eine dedizierte Factory-Klasse wäre in diesem Szenario überflüssig, da ich Objekte nicht im laufenden Betrieb, sondern nur während der Instanziierung anderer Beans erstellen musste.

    
mrembisz 13.05.2012 20:12
quelle