Spring Eltern-Kind-Container
Der allgemeine Kontextbehälter des Frühlings kann in Vater und Sohn, Elternbehälter und Kinderbehälter unterteilt werden. ** Der übergeordnete Container ist für den untergeordneten Container sichtbar und der untergeordnete Container ist nicht für den Elternbehälter sichtbar **.
Für das herkömmliche Feder -MVC ist der Feder -MVC -Container ein untergeordneter Container, dh der Container, der dem ServletDispatcher entspricht, ist ein untergeordneter Container, und die Konfiguration in web.xml ist der übergeordnete Container über die ContextConFigLocation -Eigenschaft des ConextloaderListener.
Verwenden Sie Szenarien von Containern von Vater und Sohn
Der Hauptzweck des Vater-Sohn-Behälters ist die Kontextisolation. Betrachten Sie eines der folgenden Szenarien.
Project-API muss einige Methoden im Projektservice dekorieren und sie dekorieren, z. B. das Dekorieren von Customerservice. Die dekorierte Klasse ist CachedCustomerService. Jetzt enthält das Projekt-API zwei Kundenservices, einer ist der Customerservice aus dem Projektservice und der andere der CachedCustomerservice. Wenn alle Konfigurationsdateien des Projekt-API-Projekts durch einen Kontext geladen werden, treten unweigerlich Probleme auf (die übliche Praxis besteht darin, das Import-Tag zu verwenden, um sie alle zu importieren). Denn der PayService im Projekt wird über den @Resource -Standard in den Customerservice injiziert, ähnlich wie folgt
@SerivcePublic Class PayService {@ResourcePrivate Customerservice Cuservice;}Lösung
Zu diesem Zeitpunkt werden zwei Zolldienste angetroffen Es kann nicht interpretieren, welchen Dienst injizieren soll.
Natürlich werden einige Leute sagen, die Ressourceneigenschaft von PayService zu ändern und anzugeben, welche man injizieren soll. Wenn jedoch Project-service.jar eine Bibliothek von Drittanbietern ist, wird das Ändern des Codes nicht modisch, es sei denn, der Quellcode wird erhalten.
Zu diesem Zeitpunkt kann dieses Problem durch den Eltern-Sohn-Container gelöst werden.
Legen Sie den Projektservice in den übergeordneten Container, und alle Projekt-API-Bohnen sind in Kindercontainern geladen.
Unter der Annahme, dass die Kontextkonfigurationsdatei von Project-API project-api.xml ist, lautet die Implementierungsmethode wie folgt.
1. Definieren Sie Projekt-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> <constructor-arg> <ref Bean = "serviceContext"/> </constructor-arg> </bean>
2. In der Kontextkonfiguration von web.xml ist Folgendes.
<context-param> <param-name>contextConfigLocation</param-name> <param-value> classpath*:project-total.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class> </listener> <listener> <Hörer-Klasse> org.springframework.web.context.contextloaderListener </Listener-Klasse> </Listener>
serviceContext ist der übergeordnete Container und Apicontext ist der untergeordnete Container, so dass der serviceContext den Apicontext nicht sehen kann und der Apicontext die Wirkung von serviceContext erkennen kann.
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.