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.
Das ist eine wirklich gute Antwort, ich würde mehr Stimmen geben, wenn ich könnte. – ben3000