2014-02-14 10 views

Antwort

20

Im Grunde sagt es Spring AutowiredAnnotationBeanPostProcessor die setSomething Methode mit dem aufgelösten Wert von some.property als Argument zu nennen ... aber nur, wenn Sie ein PropertySourcesPlaceholderConfigurer in Ihren Bean Definitionen haben; Wenn Sie nicht konfiguriert haben, wird der Postprozessor nur die Zeichenfolge "${some.property}" (ohne Anführungszeichen) in Ihre Methode einfügen.

Eine IllegalArgumentException wird ausgelöst, wenn der Wert nicht aufgelöst werden konnte, es sei denn, Sie haben einen Standardwert verwendet, z. "${some.property:default}".

Feder löst diese Werte unter Verwendung der aktuellen Environment und ihrer PropertySources z. JVM-Systemeigenschaften, eine Java-Properties-Datei usw.

auch Sie können use Spring Expression Language (SpEL), um die Dinge zu lösen wie #{someBean.someMethod} oder #{systemProperties[user.region]}

Nebenbei bemerkt: Da die Dokumentation

heißt

Felder injiziert werden direkt nach Aufbau einer Bean, bevor irgendwelche Config-Methoden aufgerufen werden. [...] Bean Property Setter Methoden [wie in diesem Fall] sind eigentlich nur ein Spezialfall einer solchen allgemeinen Konfigurationsmethode.

Ein häufiger Fehler ist zu versuchen, eine gewisse Logik in Ihrem Konstruktor auszuführen unter Verwendung der Wert injiziert, aber in diesem Moment hat sich der Wert nicht aufgelöst noch injiziert werden, da der Konstruktor, um beenden muss den Wert in der Config-Methode zu injizieren . In diesen Fällen müssen Sie die @Value oder @Autowired Annotationen in Ihren Konstruktorargumenten verwenden.

Sie können auch oder das XML-Attribut init-method verwenden, das auf eine Methode verweist, die ausgeführt wird, nachdem die Bean-Eigenschaften festgelegt wurden. Alternativ können Sie die Schnittstelle InitializingBean implementieren.

+1

Das ist eine wirklich gute Antwort, ich würde mehr Stimmen geben, wenn ich könnte. – ben3000

Verwandte Themen