Überschreiben Bohnen in Java-basierte spring-Konfiguration Hierarchie

Nehmen wir an wir haben eine Anwendung, die angepasst werden kann für einige Kunden. Die Anwendung ist über Java-basierte spring-Konfiguration (ein.k.ein. Java-config) für dependency injection. Die Anwendung besteht aus Modulen und deren Teilgebiete. Jedes Modul und Submodul hat seine eigene @Configuration Klasse importiert werden, die von übergeordneten Konfiguration mit @Import. Dadurch entsteht die folgende Hierarchie:

                MainConfig
          ----------+----------------   ....
          |                         |
    ModuleAConfig               ModuleBConfig
      |--------------------|
      |                    |
    SubModuleA1Config    SubModuleA2Config

Beispielsweise ModuleAConfig sieht wie folgt aus:

@Configuration
@Import({SubModuleA1Config.class, SubModuleA2Config.class})
public class ModuleAConfig {
    //some module level beans
}

Lassen Sie uns sagen, dass SubModuleA1Config definiert bean someBean Typ SomeBean:

@Configuration
public class SubModuleA1Config {
    @Bean
    public SomeBean someBean() { return new SomeBean(); }
}

Nun möchte ich, um die Anwendung anpassen für Customer1 (C1) - möchte ich C1SomeBean (Erweiterung SomeBean) statt SomeBean als someBean.

Wie kann ich erreichen, das mit mindestens Verdoppelung?

Einer meiner Ideen war die Vorbereitung alternative Hierarchie mit C1Config Erben von MainConfig, C1ModuleAConfig aus ModuleAConfig und C1SubModuleA1Config aus SubModuleA1Config. C1SubModuleA1Config Kraft setzen würden someBean() Methode der Rückkehr C1SomeBean. Leider mit Feder 4.0.6 bekomme ich so etwas wie:

   Overriding bean definition for bean 'someBean': replacing [someBean defined in class C1SubmoduleA1Config] with [someBean defined in class SubModuleA1Config]

und in der Tat SomeBean - Klasse zurückgegeben wird, vom Kontext statt C1SomeBean. Dies ist eindeutig nicht das, was ich will.

InformationsquelleAutor Dawid Pytel | 2014-08-11
Schreibe einen Kommentar