conteneur parent-enfant printanier
Le conteneur de contexte général du printemps peut être divisé en père et fils, conteneur parent et conteneur enfant. ** Le conteneur parent est visible pour le conteneur enfant et le conteneur enfant n'est pas visible pour le conteneur parent **.
Pour le Spring MVC traditionnel, le conteneur Spring MVC est un conteneur enfant, c'est-à-dire que le conteneur correspondant à ServletDispatcher est un conteneur enfant, et la configuration dans web.xml est le conteneur parent via la propriété ContextConfiglocation du ConextLoaderListener.
Utilisez des scénarios de conteneurs père et fils
Le but principal du conteneur père-fils est l'isolement du contexte. Considérez l'un des scénarios suivants.
Project-API doit décorer certaines méthodes en service de projet et les décorer, comme la décoration de la restauration. La classe décorée est cachedCustomerService. Ainsi, maintenant le projet-API contient deux Services clients, l'un est le service de clients du service de projet, et l'autre est le CachedCustomerService. À l'heure actuelle, si tous les fichiers de configuration du projet Project-API sont chargés dans un contexte, les problèmes se posent inévitablement (la pratique habituelle consiste à utiliser la balise d'importation pour les importer toutes). Parce que, le paiement du projet est injecté dans le service de clientèle via la norme @Resource, similaire à ce qui suit
@SerivCepublic Class WayService {@ResourcePrivate CustomerService Cusservice;}Solution
À l'heure actuelle, car le contexte injecte la propriété CustomerService, deux services de douane sont rencontrés. Il ne peut pas interpréter le service à injecter.
Bien sûr, certaines personnes devront modifier la propriété des ressources de la rémunération et spécifier celle à injecter. Cependant, si Project-Service.jar est une bibliothèque tierce, la modification du code devient impossible à moins que le code source ne soit obtenu.
Pour le moment, ce problème peut être résolu via le conteneur parent-son.
Mettez le service de projet dans le conteneur parent et tous les haricots de projet-API sont chargés dans des conteneurs enfants.
En supposant que le fichier de configuration de contexte de Project-API est Project-API.xml, la méthode d'implémentation est la suivante.
1. Définir Project-Total.xml
<bean id = "ServiceContext"> <constructor-arg> <value> classpath: project-service.xml </value> </ constructor-arg> </ bean> <bean id = "apicontext"> <constructor-arg> <value> classpath: project-api.xml </value> </ constructor-arg> <constructeur-arg> </ Constructor-Arg> </bEAN>
2. Dans la configuration de contexte de web.xml, ce qui suit est.
<Touxet-Param> <Am param-name> ContextConfiglocation </ Param-Name> <Am param-Value> ClassPath *: Project-Total.xml </ Param-Value> </ Context-Param> <Dusiner> <auditeur-Class> ORG.SPRINGFRAMEWROWN.Web.util.Logers <écouteur-classe> org.springframework.web.context.contextLoaderListener </ écouteur-classe> </diner>
ServiceContext est le conteneur parent et ApiContext est le conteneur enfant, de sorte que le ServiceContext ne peut pas voir l'apicontext, et ApiContext peut voir l'effet de ServiceContext.
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.