Überschreibt Beans in der Java-basierten Spring-Konfigurationshierarchie

8

Nehmen wir an, wir haben eine Anwendung, die für einige Kunden angepasst werden kann. Die Anwendung verwendet eine Java-basierte Spring-Konfiguration (a.k.a. Java Config) für die Abhängigkeitsinjektion. Die Anwendung besteht aus Modulen und ihren Submodulen. Jedes Modul und Submodul hat seine eigene Klasse @Configuration , die durch die Elternkonfiguration mit @Import importiert wird. Dies erstellt die folgende Hierarchie:

%Vor%

Zum Beispiel sieht ModuleAConfig folgendermaßen aus:

%Vor%

Nehmen wir an, dass SubModuleA1Config die Bean someBean vom Typ SomeBean definiert:

%Vor%

Jetzt möchte ich die Anwendung für Customer1 anpassen (C1) - Ich möchte C1SomeBean (Erweiterung SomeBean ) anstelle von SomeBean als someBean verwenden.

Wie kann ich dies mit minimaler Vervielfältigung erreichen?

Eine meiner Ideen war die Erstellung einer alternativen Hierarchie mit C1Config von MainConfig , C1ModuleAConfig von ModuleAConfig und C1SubModuleA1Config von SubModuleA1Config . C1SubModuleA1Config überschreibt someBean() method und gibt C1SomeBean zurück. Leider bekomme ich mit Spring 4.0.6 etwas wie:

%Vor%

und tatsächlich SomeBean klasse wird aus dem Kontext zurückgegeben anstatt von C1SomeBean . Das ist eindeutig nicht das, was ich will.

    
Dawid Pytel 11.08.2014, 21:02
quelle

1 Antwort

9

Beachten Sie, dass Sie @Import , das Konfigurationsklassen erweitert, nicht überschreiben können.

Wenn Sie auswählen möchten, welche Importe zur Laufzeit verwendet werden sollen, können Sie stattdessen @ImportSelector verwenden.

Allerdings sind @Configuration -Klassen nicht mehr die im Spring (Bereich) verwalteten Fabriken. Da Sie bereits eine Factory-Methode für someBean haben, müssen Sie nicht noch weiter gehen:

%Vor%

Aktualisieren

Verwenden eines ImportSelectors:

%Vor%

Da jeder Kunde jedoch ein separates Paket hat, sollten Sie auch @ComponentScan verwenden. Dies wählt die vorhandene Konfigurationsklasse aus und benötigt keine zusätzliche Konfigurationseigenschaft.

%Vor%     
Jose Luis Martin 12.08.2014, 09:08
quelle

Tags und Links