2010-01-31 1 views

Antwort

24

Ja, sie sollten vom Geltungsbereich singleton sein. Dienste sollten zustandslos sein und benötigen daher nicht mehr als eine Instanz.

Wenn Sie sie also im Bereich singleton definieren, sparen Sie Zeit, um sie zu instanziieren und zu verkabeln.

singleton ist der Standardbereich im Frühjahr, also lassen Sie Ihre Bean-Definitionen so, wie sie sind, ohne das Attribut scope explizit anzugeben.

Sie können mehr über Bereiche in the spring docs lesen.

+0

Danke. Ich bin neu in Spring, ich weiß, wie man eine Singleton-Klasse schreibt, aber wie stelle ich mit Spring einen "Singleton-Bereich" ein? – oym

+0

Oh, ich habe Ihren Kommentar nicht darüber gelesen, dass es sich um den Standardbereich handelt. Könntest du mir bitte erklären, wo dieser Bereich eingestellt und konfiguriert ist, nur damit ich eine Vorstellung davon haben kann, wie alles verkabelt ist? Danke noch einmal. – oym

+0

Ich habe den Link zu meiner Antwort hinzugefügt. – Bozho

2

Der Frühling ist einfacher zu verwenden, wenn Sie mit Singleton-Bereich Bohnen bleiben. Singletons sind ihre "Standardposition", wenn Sie möchten. Ja, es unterstützt andere Bereiche (unter Verwendung von scope="xyz" in der XML-Datei), aber es macht die Verwendung schwieriger und beeinträchtigt die Leistung.

Im Wesentlichen, wenn Sie keinen guten Grund haben, etwas anderes zu tun, bleiben Sie mit Singletons.

1

Sie benötigen meist Singletons. (Spring default.) Singletons müssen Thread-sicher sein, da parallele Anfragen die gleiche Instanz verwenden. In der Tat müssen sie völlig staatenlos sein, weil sie jederzeit zerstört und neu erstellt werden können.

Wenn Sie den Status innerhalb Ihrer Bean verfolgen müssen (sollten Sie nicht, sollte dies in der Datenbank oder in der Anforderung gespeichert sein), erhalten Sie viele Instanzen des gleichen Typs von Bean, die Speicherauslastung steigt mit der Anzahl der Anfragen, wobei Sie bei Singletons nur noch eine Instanz haben.

Auch wenn Sie Ihre Beans auf eine Anfrage beschränken, müssen sie dennoch mindestens threadsicher sein (Anfragen, die zur selben Zeit vom selben Browser kommen).

+0

Spring Singleton Bohnen können * nicht * erstellt werden und jederzeit zerstört, ich weiß nicht, woher du das hast (vielleicht verwechselst du sie mit EJB-Session-Beans). Außerdem ist der veränderbare Zustand in einem Spring-Singleton absolut in Ordnung, Sie müssen lediglich wissen, welche Operationen in diesem gemeinsamen Zustand ausgeführt werden können. – skaffman