2013-07-11 20 views
33

Kann jemand erklären, was die Bereiche in Spring Beans sind Ich habe immer nur 'Prototyp' verwendet, aber gibt es andere Parameter, die ich an Stelle davon setzen kann?Spring Bean Scopes

Beispiel von dem, was ich rede

<bean id="customerInfoController" class="com.action.customer.Controller" scope="prototype"> 
    <property name="accountDao" ref="accountDao"/> 
    <property name="utilityDao" ref="utilityDao"/> 
    <property name="account_usageDao" ref="account_usageDao"/> 
</bean> 
+0

See [Bean Scopes] (http://static.springsource.org/spring/docs/3.0.0.M3/reference/html/ch04s04.html) – Reimeus

+0

http://www.mkyong.com/spring/spring-bean-scope-examples/ – sanbhat

+0

[Eine viel bessere und offizielle Dokumentation hier] (http://docs.spring.io/spring-framework/docs/current/spring-framework- Referenz/html/beans.html # beans-factory-scopes) – KNU

Antwort

53

Vom spring specs gibt es fünf Arten von Bohnen Bereiche unterstützt:

1. Singleton (default *)

Skaliert eine einzelne Bean-Definition für eine einzelne Objektinstanz pro Spring IoC-Container.

2. Prototyp

Scopes eine einzelne Bohne Definition auf eine beliebige Anzahl von Objektinstanzen.

3. Anfrage

Scopes eine einzelne Bohne Definition des Lebenszyklus eines einzelnen HTTP Anfrage; Das bedeutet, dass jeder HTTP-Request eine eigene Instanz einer Bean hat, die hinter einer einzelnen Bean-Definition erstellt wird. Nur gültig im Zusammenhang mit einem webfähigen Spring ApplicationContext.

4. Sitzung

Scopes eine einzelne Bohne Definition des Lebenszyklus eines HTTP-Session. Nur gültig im Zusammenhang mit einem webfähigen Spring ApplicationContext.

5. globale Sitzung

Scopes eine einzelne Bohne Definition des Lebenszyklus eines globalen HTTP Session. In der Regel nur gültig, wenn sie in einem Portletkontext verwendet werden. Nur gültig im Kontext eines webfähigen Spring ApplicationContext.

* Standard bedeutet, wenn im Bereich <bean /> kein Bereich explizit angegeben ist. hier mehr über sie lesen: http://static.springsource.org/spring/docs/3.0.0.M3/reference/html/ch04s04.html

2

Die Frühling Dokumentation beschreibt die following standard scopes:

Singletons: (Default) Scopes eine einzelne Bohne Definition auf eine einzelne Objektinstanz pro Feder IoC-Container.

Prototyp: Scopes eine einzelne Bean-Definition auf eine beliebige Anzahl von Objektinstanzen.

Anfrage: Definiert eine einzelne Bean-Definition für den Lebenszyklus einer einzelnen HTTP-Anfrage; Das bedeutet, dass für jede HTTP-Anfrage eine eigene Bean-Instanz außerhalb einer einzelnen Bean-Definition erstellt wird. Nur gültig im Kontext eines webfähigen Spring ApplicationContext.

Sitzung: Definiert eine einzelne Bean-Definition für den Lebenszyklus einer HTTP-Sitzung. Nur gültig im Kontext eines webfähigen Spring ApplicationContext.

globale Sitzung: Definiert eine einzelne Bean-Definition für den Lebenszyklus einer globalen HTTP-Sitzung. In der Regel nur gültig, wenn sie in einem Portletkontext verwendet werden. Nur gültig im Kontext eines webfähigen Spring ApplicationContext.

Weitere benutzerdefinierte Bereiche können auch mit einer CustomScopeConfigurer erstellt und konfiguriert werden. Ein Beispiel wäre der von Spring Webflow hinzugefügte Bereich flow.

Übrigens, Sie argumentieren, dass Sie immer verwendet, was ich seltsam finde. Der Standardumfang ist singleton und in der Anwendung, die ich entwickle, brauche ich selten den Prototypumfang. Sie sollten vielleicht einen Blick darauf werfen.

4

Detaillierte Erklärungen zu den einzelnen Oszilloskopen finden Sie unter Spring bean scopes. Im Folgenden finden Sie die Zusammenfassung

Singleton - (Default) pro Feder IoC-Container eine einzelne Bohne Definition auf eine einzelne Objektinstanz Scopes.

Prototyp - Scopes eine einzelne Bean-Definition auf eine beliebige Anzahl von Objektinstanzen.

Anfrage - Scopes eine einzelne Bean-Definition auf den Lebenszyklus einer einzelnen HTTP-Anfrage; Das bedeutet, dass für jede HTTP-Anfrage eine eigene Bean-Instanz außerhalb einer einzelnen Bean-Definition erstellt wird. Nur gültig im Kontext eines webfähigen Spring ApplicationContext.

Sitzung - Definiert eine einzelne Bean-Definition für den Lebenszyklus einer HTTP-Sitzung. Nur gültig im Kontext eines webfähigen Spring ApplicationContext.

globale Sitzung - Definiert eine einzelne Bean-Definition für den Lebenszyklus einer globalen HTTP-Sitzung. In der Regel nur gültig, wenn sie in einem Portletkontext verwendet werden. Nur gültig im Kontext eines webfähigen Spring ApplicationContext.

12

Im Frühjahr wird der Bean-Bereich verwendet, um zu entscheiden, welcher Typ von Bean-Instanz vom Spring-Container an den Aufrufer zurückgegeben werden soll.

5 Arten von Bohnen Bereiche werden unterstützt:

  1. Singleton: Es gibt eine einzelne Bean-Instanz pro Frühling IoC container.This einzelne Instanz in einem Cache eines solchen Singleton Bohnen gespeichert, und alle nachfolgenden Anforderungen und Verweise für diese benannte Bean geben das zwischengespeicherte Objekt zurück. Wenn in der Bean-Konfigurationsdatei kein Bean-Bereich angegeben ist, Standardwert für Singleton.

  2. Prototyp: Es wird jedes Mal, wenn angefordert, eine neue Bean-Instanz zurückgegeben. Es speichert keine Cache-Version wie Singleton.

  3. Anforderung: Gibt eine einzelne Bean-Instanz pro HTTP-Anforderung zurück.

  4. Sitzung: Es wird eine einzelne Bean-Instanz pro HTTP-Sitzung zurückgegeben (Sitzung auf Benutzerebene).

  5. GlobalSession: Gibt eine einzelne Bean-Instanz pro globaler HTTP-Sitzung zurück. Es ist nur im Zusammenhang mit einem webfähigen Spring ApplicationContext (Sitzung auf Anwendungsebene) gültig.

In den meisten Fällen können Sie nur mit dem Federkern Umfang beschäftigen - Singletons und Prototyp und der Standardbereich ist Singleton.

1

Ich möchte nur aktualisieren, dass in Spring 5, wie in Spring docs erwähnt, unterstützt Spring 6 Bereiche, von denen fünf nur verfügbar sind, wenn Sie einen webfähigen ApplicationContext verwenden.

Singletons (Default) Scopes eine einzelne Bohne Definition auf eine einzelne Objektinstanz pro Container Frühling IoC.

Prototyp Erlaubt die Definition einer einzelnen Bean zu einer beliebigen Anzahl von Objektinstanzen.

Anfrage Scopes eine einzelne Bean-Definition auf den Lebenszyklus einer einzelnen HTTP-Anfrage; Das bedeutet, dass für jede HTTP-Anfrage eine eigene Bean-Instanz außerhalb einer einzelnen Bean-Definition erstellt wird. Nur gültig im Kontext eines webfähigen Spring ApplicationContext.

Sitzung Definiert eine einzelne Bean-Definition für den Lebenszyklus einer HTTP-Sitzung. Nur gültig im Kontext eines webfähigen Spring ApplicationContext.

Anwendung Scopes eine einzelne Bean-Definition auf den Lebenszyklus eines ServletContext. Nur gültig im Kontext eines webfähigen Spring ApplicationContext.

Websocket Definiert eine einzelne Bean-Definition für den Lebenszyklus eines WebSockets. Nur gültig im Kontext eines webfähigen Spring ApplicationContext.

+0

Es gibt insgesamt 6 Bereiche und Top zwei können ohne Web-Kenntnisse verwendet werden? Wenn ja, wie sagt man das von 6, von denen fünf nur verfügbar sind, wenn Sie einen webfähigen ApplicationContext verwenden? – MrKumar

0

Über Prototyp Bohne (e):

Der Client-Code muss Prototyp-scoped Objekte aufzuräumen und lassen teure Ressourcen, die der Prototyp Bohne (n) halten. Um den Spring-Container zum Freigeben von Ressourcen zu erhalten, die von prototypgebundenen Beans gehalten werden, versuchen Sie einen benutzerdefinierten Bean-Postprozessor zu verwenden, der einen Verweis auf Beans enthält, die bereinigt werden müssen.

ref: https://docs.spring.io/spring/docs/3.0.0.M3/reference/html/ch04s04.html#beans-factory-scopes-prototype