Aujourd'hui, j'ai étudié la portée de la portée. La valeur par défaut est le mode singleton, c'est-à-dire scope = "singleton". De plus, Scope a également le prototype, la demande, la session et la portée mondiale de session. scope = "prototype" plusieurs exemples. Lors de la configuration de la portée d'un bean, son formulaire de fichier d'en-tête est le suivant:
Comment utiliser la portée de Spring:
<bean id = "rôle" scope = "singleton" />
La portée ici est utilisée pour configurer la portée de Springbean, qui identifie la portée du haricot.
Avant le printemps 2.0, les haricots n'avaient que deux lunettes: Singleton (Singleton), non-Singleton (également connu sous le nom de prototype). Après Spring 2.0, trois haricots spécialement conçus pour des contextes d'application Web ont été ajoutés. Par conséquent, Spring 2.0 a désormais cinq types de haricots par défaut. Bien sûr, Spring 2.0 a refactorisé la conception des types de haricots et conçu le support de type de haricots flexible. En théorie, il peut y avoir d'innombrables types de haricots. Les utilisateurs peuvent ajouter de nouveaux types de haricots en fonction de leurs besoins pour répondre aux besoins réels de l'application.
1. Portée singleton
Lorsque la portée d'un haricot est définie sur Singleton, il n'y aura qu'une seule instance de haricot partagée dans le conteneur SpringIoc, et toutes les demandes de haricots, tant que l'ID correspond à la définition de haricots, seule la même instance du haricot sera retournée. En d'autres termes, lors de la définition d'une définition de bean sur la portée de Singleton, le conteneur SpringIoc ne crée qu'une instance unique de cette définition de bean. Cette instance unique sera stockée dans le cache Singleton, et toutes les demandes et références suivantes au Bean renverront l'instance d'objet mise en cache. Il convient de noter ici que la portée singleton et le singleton dans le modèle de conception GoF sont complètement différents. Le modèle de conception singleton signifie qu'une seule classe existe dans un chargeur de classe, et le singleton signifie ici qu'un conteneur correspond à un haricot. C'est-à-dire que lorsqu'un haricot est identifié comme un singleton, un seul haricot existera dans le conteneur Spring IOC.
Instance de configuration:
<bean id = "rôle" scope = "singleton" /> ou <bean id = "role" singleton = "true" />
2. Prototype
Chaque demande (l'injecter dans un autre haricot, ou appeler la méthode getbean () du conteneur sous la forme d'un programme) produira une nouvelle instance de haricot, ce qui équiviendra à une nouvelle opération. Pour les haricots avec une portée prototype, on est très important, c'est-à-dire que le printemps ne peut pas être responsable de l'ensemble du cycle de vie d'un PrototypeBean. Une fois que le conteneur initialise, configure, décorait ou assemble une instance de prototype, il le remet au client, puis ignore l'instance prototype. Quelle que soit la portée, le conteneur appellera la méthode de rappel de cycle de vie initialisé de tous les objets, et pour le prototype, toute méthode de rappel de vie de vie configurée ne sera pas appelée. Il est de la responsabilité du code client d'effacer le prototype d'objet portée et de libérer toutes les ressources coûteuses détenues par le PrototypeBean. (Un moyen possible d'avoir les ressources libres de conteneurs à ressort occupé par un haricot à singleton est d'utiliser le post-processor du haricot, qui détient une référence au haricot à éliminer.)
Instance de configuration:
<bean id = "role" scope = "prototype" /> ou <anonid = "role" singleton = "false" />
3. Demande
La demande indique qu'un nouveau bean sera généré pour chaque demande HTTP. Dans le même temps, le haricot n'est valide que dans le HttpRequest actuel. L'instance de configuration est:
Lorsque vous utilisez la demande, la session et les GlobalSession, vous devez d'abord effectuer la configuration suivante dans le web initialisé.xml:
Si vous utilisez un conteneur Web avec Servlet 2.4 ou supérieur, il vous suffit d'ajouter le contextener ContextListener suivant au fichier de déclaration XML Web.xml de l'application Web:
<web-app> ... <ousiner> <écouteur-class> org.springframework.web.context.request.requestContextListener </ écouteur-class> </diner> ... </ web-App>
S'il s'agit d'un conteneur Web avant Servlet 2.4, vous devez utiliser une implémentation javax.servlet.filter:
<Web-App> .. <Filter> <Lilter-Name> requestContextFilter </ Filter-Name> <Filter-Class> org.springframework.web.filter.requestContextFilter </ Filter-Class> </filter> <filter-Mapping> <filter-name> </filter-mapping> ... </ web-app>
Ensuite, vous pouvez configurer la portée du haricot:
<bean id = "role" scope = "request" />
4. Session
La portée de la session indique qu'un nouveau bean sera généré pour chaque demande HTTP. Dans le même temps, le haricot n'est valable que dans la HTTPSession actuelle. L'instance de configuration est:
Instance de configuration:
Tout comme la condition préalable pour configurer l'instance de demande, après avoir configuré le fichier de démarrage Web, vous pouvez le configurer comme suit:
<bean id = "rôle" scope = "session" />
5. GlobalSession
La portée des GlobalSession est similaire à la portée standard de HTTPSession, mais elle n'a de sens que dans les applications Web basées sur Portlet. La spécification du portlet définit le concept d'une session globale, qui est partagée par tous les différents portlets qui composent une application Web de portlet. Les haricots définis dans la portée des Globalsession sont limités au cycle de vie de la PortletSession mondiale. Si vous utilisez la portée des GlobalSession pour identifier les haricots sur le Web, le Web sera automatiquement utilisé comme type de session.
Instance de configuration:
Tout comme la condition préalable pour configurer l'instance de demande, après avoir configuré le fichier de démarrage Web, vous pouvez le configurer comme suit:
<bean id = "rôle" scope = "Session globale" />
Résumer
Ce qui précède concerne la brève discussion de cet article sur la portée du printemps, et j'espère qu'elle sera utile à tout le monde. Les amis intéressés peuvent continuer à se référer à d'autres sujets connexes sur ce site. S'il y a des lacunes, veuillez laisser un message pour le signaler. Merci vos amis pour votre soutien pour ce site!