2017-02-01 5 views
1

Habe 2 Java Beans in meinem Spring-Boot-Projekt. Die erste Bean erhält die Werte aus der Eigenschaftendatei (Spring injected) und die zweite Bean erhält die Werte aus verschiedenen Quellen.Spring inject Eigenschaftswerte von einer Bean in eine andere Bean

Nach der Initialisierung von Spring möchte ich die Eigenschaftswerte aus der zweiten Bean in die erste Bean zusammenführen. Bitte lassen Sie wissen, ob Spring eine Klasse bietet, um die Werte dynamisch zu injizieren.

first bean gets the values from property file: 
---------------------------------------------- 
@value("username") 
private String username 
@Value("server") 
private String servername 
@Value("inject from second bean") 
private String location 
@Value("inject from second bean") 
private boolean enabled 

second bean gets the values from different source 
----------------------------------------------- 
private String location 
private boolean enabled 

Antwort

1

Versuchen Sie, den Ausdruck langugage mit:

@Value(#{anotherBean.location}) 
private String location 
@Value(#{anotherBean.enabled}) 
private boolean enabled 

aktualisieren

Alternativ Sie, dass in der Post-Konstrukt zuordnen:

@Autowired 
private AnotherBean anotherBean; 

@PostConstruct 
public void init(){ 
    location = anotherBean.getLocation(); 
    enabled = anotherBean.isEnabled(); 
} 

Update 2

Das letzte, was mir in den Sinn kommt, dass der Box funktionieren könnte den Umfang der ersten Bohne verändert statt Singleton zum Prototyp:

@Scope("prototype") 

Jetzt jedes Mal diese Bohne verwendet würde (getBean auf Frühling Kontext zum Beispiel) eine neue Instanz würde erstellt werden .. und jedes Mal frische Daten von einem anderen Bean injiziert werden.

Aber das ist spezifisch, also müssten Sie überlegen, ob dieses Szenario zu Ihrer Anwendung passt.

+0

Dies aktualisiert die erste Bean nicht, da die zweite Bean nach der Spring-Initialisierung aktualisiert wurde. Wenn in der zweiten Bean ein Standardwert festgelegt ist, wurde sie in der ersten Bean aktualisiert, aber wenn die zweite Bean nach dem Initialize/Post-Konstrukt aktualisiert wurde, werden die Änderungen nicht an die erste weitergegeben. – skumar

+1

Die einzige Alternative ist, sie im Postconstruct zu setzen. Aber wenn Sie sie in einer Art "Live" Weise aktualisieren möchten .. dann müssten Sie einige benutzerdefinierte Beobachter oder etwas ähnliches erstellen. –

+0

postconstruct hat nicht funktioniert. möglicherweise werde ich die Getter-Methode der ersten Bean aktualisieren, um die zweite Bean-Eigenschaft zu betrachten getLocation() {anotherbean.getLocation()} – skumar