2012-12-08 19 views
13

Meine Webanwendung verwendet Feder IOC. Also werden alle meine Spring-Beans Singleton sein (standardmäßig). Wenn zwei Anfragen versuchen, auf zwei verschiedene Methoden einer einzelnen Klasse zuzugreifen. Zum Beispiel: MySpringBean ist eine Klasse, die zwei Methoden und insertRecord Methoden hat. Wenn gleichzeitig versucht wird, auf beide Methoden über dieselbe Bean zuzugreifen.Wie funktioniert Spring Bean Parallelität

Wie wird die gleiche Spring Bean für beide Clients gleichzeitig verfügbar sein oder wird es ein Parallelitätsproblem sein, wenn beide Anfragen versuchen, auf zwei verschiedene Methoden zuzugreifen, aber durch die gleiche Spring Bean. und da die Frühlingsbohne Singleton ist, kann keine neue Instanz gebildet werden. Wie wird das in diesem Fall funktionieren?

Antwort

4

Wenn die Bohne ein Singleton ist, dann Frühling werden Sie die gleiche Instanz in jedem Thread. Es liegt an Ihnen, diese Bohne thread-sicher zu machen. Da es ein Singleton ist, ist es am besten, wenn Sie diese Klasse statuslos machen.

4

Wie bereits von anderen vorgeschlagen, wird Spring allen Threads im Fall von Singleton-Beans die gleiche Instanz zur Verfügung stellen.

Was Sie verstehen müssen, ist, dass Threads die gesamte Arbeit in einem System ausführen, indem sie den Code ausführen, während Objekte Status und Verhalten (Code) bereitstellen. Es ist also tatsächlich möglich, dass mehrere Threads (Anfragen in Ihrem Fall) gleichzeitig dieselben Methoden in einer Singleton-Bean ausführen. Sie können solche Bohnen entweder staatenlos machen, wie Tomasz vorgeschlagen hat, oder sie auf andere Weise "threadsicher" machen.