2017-09-26 3 views
0

Ich habe eine Konfigurationsdatei im Frühjahr, die ich einen Konstruktorparameter für jede Instanz eines bestimmten @Component, die ich im Frühjahr haben, definieren möchte. Wie kann ich das machen?Mehrere Instanzen einer Bean Spring

@Component 
public class MyComponent { 
    public MyComponent(String config) {} 
} 

und in meinem application.yml Ich möchte etwas wie folgt definieren:

myconfig: 
    - config1 
    - config2 
    - config3 

Ich mag würde Frühling erstellen eine Instanz pro config-Eintrag in der application.yml machen. Ist das möglich? Danke

Antwort

1

Es gibt keine Möglichkeit, dies automatisch mit Spring zu tun. Sie müssten die Beans einzeln definieren, wahrscheinlich durch Unterklassen, wie @Mick vorgeschlagen. Erstens, entfernen Sie die @Component Anmerkung aus der Basisklasse:

public class MyComponent { 
    public MyComponent(String config) {} 
} 

erstellen aber viele Erweiterungen dieser Sie benötigen als @Components für jede config: zB:

@Component 
public class MyComponentConfig1 extends MyComponent { 

    public MyComponentConfig1(@Value("myconfig.config1") String config) { 
      super(config); 
    } 

} 

Wo die Werte injiziert werden in die Konstruktor für Sie von Spring bei der Registrierung der Bohnen.

1

Sie möchten 3 Bohnen mit einer Anmerkung erstellen? Soweit ich weiß, nicht möglich. Warum nicht 3 Unterklassen erstellen und die Konfigurationswerte mit @Resource-Annotationen abrufen? Und übrigens: Sie müssen einen Standardkonstruktor zur Verfügung stellen, denn das ist derjenige, der aufgerufen wird.

+0

Eigentlich wird es 14 Instanzen der gleichen Klasse sein. Diese Klasse ist ein Listener von einem anderen Stream-System, über das ich keine Kontrolle habe. Also muss diese Klasse mit dem gleichen Impl 14 Instanzen haben und jeder wird auf einen anderen Stream hören ... – Augusto

+0

Sie könnten das auch tun: '@Inject Instance myFactory;' Nach dem Aufruf von 'myFactory.get()', Sie könnte Ihre Config-Eigenschaft mit einer Standard-Setter-Methode anstelle eines Konstruktor-Parameters festlegen. – Mick