Heute habe ich den Umfang des Umfangs studiert. Die Standardeinstellung ist der Singleton -Modus, d. H. Scope = "Singleton". Darüber hinaus verfügt Scope über Prototypen, Anfragen, Sitzungen und globale Sitzungen. Scope = "Prototyp" Mehrere Beispiele. Bei der Konfiguration des Umfangs einer Bohne lautet das Header -Dateiformular wie folgt:
So verwenden Sie Spring Scope:
<bean id = "rollen" scope = "Singleton"/>
Der Umfang hier wird verwendet, um den Bereich der Springbeklichkeit zu konfigurieren, der den Bohnenbereich identifiziert.
Vor Frühling 2.0 hatten Bohnen nur zwei Bereiche: Singleton (Singleton), Nicht-Singleton (auch als Prototyp bezeichnet). Nach dem Frühjahr 2.0 wurden drei Bohnen hinzugefügt, die speziell für Webanwendungskontexte entwickelt wurden. Daher hat Frühling 2.0 nun standardmäßig fünf Bohnenarten. Natürlich hat der Frühjahr 2.0 das Design von Bohnentypen neu gestaltet und flexible Bohnenunterstützung entworfen. Theoretisch kann es unzählige Bohnenarten geben. Benutzer können neue Bean -Typen entsprechend ihren Anforderungen hinzufügen, um die tatsächlichen Anwendungsanforderungen zu erfüllen.
1. Singleton Scope
Wenn ein Bohnenbereich auf Singleton eingestellt ist, gibt es im Springioc -Container nur eine gemeinsame Bean -Instanz, und alle Anfragen an Beans, solange die ID mit der Bean -Definition übereinstimmt, wird nur dieselbe Instanz der Bean zurückgegeben. Mit anderen Worten, wenn der SpringiOC -Container eine Bean -Definition auf Singleton Scope festlegt, erzeugt der Springioc Container nur eine einzigartige Instanz dieser Bean -Definition. Diese einzelne Instanz wird im Singleton -Cache gespeichert, und alle nachfolgenden Anfragen und Verweise auf die Bean geben die zwischengespeicherte Objektinstanz zurück. Es ist hier zu beachten, dass der Singleton -Bereich und das Singleton im GOF -Designmuster völlig unterschiedlich sind. Das Singleton -Designmuster bedeutet, dass nur eine Klasse in einem Klassenloader existiert, und das Singleton hier bedeutet, dass ein Behälter einer Bohne entspricht. Das heißt, wenn eine Bohne als Singleton identifiziert wird, wird im Frühlings -IOC -Behälter nur eine Bohne existieren.
Konfigurationsinstanz:
<bean id = "rollen" scope = "Singleton"/> oder <bean id = "rollen" Singleton = "true"/>
2. Prototyp
Jede Anfrage (die sie in eine andere Bohne injiziert oder die Methode des Containers in Form eines Programms aufgerufen hat) erzeugt eine neue Bean -Instanz, die einer neuen Operation entspricht. Bei Bohnen mit Prototypenfernrohr ist man sehr wichtig, dh der Frühling kann nicht für den gesamten Lebenszyklus einer Prototypbean verantwortlich sein. Nachdem der Container eine Prototyp -Instanz initialisiert, konfiguriert, dekoriert oder zusammenstellt, übergibt es es dem Client und ignoriert dann die Prototypinstanz. Unabhängig vom Umfang nennt der Container die initialisierte Lebenszyklus -Rückrufmethode aller Objekte, und für Prototypen wird eine konfigurierte Zerstörungs -Lebenszyklus -Rückrufmethode nicht aufgerufen. Es liegt in der Verantwortung des Client -Codes, das von der Prototypbean gehaltene Prototyp -Scoped -Objekt zu löschen und alle teuren Ressourcen zu befreien. (Ein praktikabler Weg, um die von einer Singleton-Bohnen bewohnten Federbehälter-Ressourcen durch die Verwendung des Postprozessors der Bohne zu haben, der einen Hinweis auf die zu gelöschte Bean hat.)
Konfigurationsinstanz:
<bean id = "rollen" scope = "prototyp"/> oder <beanid = "rollen" Singleton = "false"/>
3. Anfrage
Die Anforderung zeigt an, dass für jede HTTP -Anforderung eine neue Bean generiert wird. Gleichzeitig gilt die Bohne nur im aktuellen HTTPrequest. Die Konfigurationsinstanz lautet:
Bei Verwendung von Anforderungen, Sitzungen und GlobalSession müssen Sie zunächst die folgende Konfiguration in der initialisierten Web.xml erstellen:
Wenn Sie einen Webcontainer mit Servlet 2.4 oder höher verwenden, müssen Sie der XML -Deklarationsdatei web.xml der Webanwendung nur den folgenden Kontextlistener hinzufügen:
<NEW-App> ... <Hörer> <Hörer-Klasse> org.springframework.web.context.request.RequestContextListener </Listener-Klasse> </Listener> ... </web-App>
Wenn es sich um einen Webcontainer vor dem Servlet 2.4 handelt, müssen Sie eine Implementierung von javax.servlet.filter verwenden:
<NEW-App> .. <Filter> <Filter-name> requestContextFilter </filter-name> <filter-class> org.springFramework.web.filter.requestContextFilter </Filter-Class> </filter> <Filter-mapping> <filter-name> Anforderungsanforderung </filter-name> <URL-Muster>/*</url-pattern> </filter-mapping> ... </web-App>
Dann können Sie den Umfang der Bohne konfigurieren:
<bean id = "rollen" scope = "request"/>
4. Sitzung
Der Sitzungsbereich zeigt an, dass für jede HTTP -Anforderung eine neue Bean generiert wird. Gleichzeitig ist die Bohne nur innerhalb der aktuellen HTTPSession gültig. Die Konfigurationsinstanz lautet:
Konfigurationsinstanz:
Genau wie die Voraussetzung für die Konfiguration der Anforderungsinstanz, nachdem Sie die Web -Start -Datei konfiguriert haben, können Sie sie wie folgt konfigurieren:
<bean id = "rollen" scope = "session"/>
5. GlobalSession
Der GlobalSession-Bereich ähnelt dem Standard-HTTPSession-Bereich, ist jedoch nur in portletbasierten Webanwendungen sinnvoll. Die Portlet -Spezifikation definiert das Konzept einer globalen Sitzung, die von allen verschiedenen Portlets ausgetauscht wird, aus denen eine Portlet -Webanwendung besteht. Die im GlobalSession -Bereich definierten Bohnen beschränken sich auf den Lebenszyklus der globalen PortletSession. Wenn Sie GlobalSession Scope verwenden, um Beans im Web zu identifizieren, wird das Web automatisch als Sitzungstyp verwendet.
Konfigurationsinstanz:
Genau wie die Voraussetzung für die Konfiguration der Anforderungsinstanz, nachdem Sie die Web -Start -Datei konfiguriert haben, können Sie sie wie folgt konfigurieren:
<bean id = "rollen" scope = "global session"/>
Zusammenfassen
In der oben genannten Art dreht sich alles um die kurze Diskussion dieses Artikels über den Umfangsumfang im Frühjahr, und ich hoffe, dass es für alle hilfreich sein wird. Interessierte Freunde können weiterhin auf andere verwandte Themen auf dieser Website verweisen. Wenn es Mängel gibt, hinterlassen Sie bitte eine Nachricht, um darauf hinzuweisen. Vielen Dank an Freunde für Ihre Unterstützung für diese Seite!