Eine Kurzanleitung zu Spring @Value

Eine Kurzanleitung zu Spring @Value

1. Überblick

In diesem kurzen Artikel gehen wir zuhave a look at the @Value Spring annotation.

Diese Annotation kann zum Einfügen von Werten in Felder in Spring-Managed-Beans verwendet und auf Feld- oder Konstruktor- / Methodenparameterebene angewendet werden.

Weitere Lektüre:

Was ist eine Frühlingsbohne?

Eine schnelle und praktische Erklärung, was ein Spring Bean ist.

Read more

Verwenden von Spring @Value mit Standardeinstellungen

Eine schnelle und praktische Anleitung zum Festlegen von Standardwerten bei Verwendung der @ Value-Annotation im Frühjahr.

Read more

2. Einrichten der Anwendung

Um die verschiedenen Verwendungsarten für diese Annotation zu beschreiben, müssen Sie eine einfache Spring-Anwendungskonfigurationsklasse konfigurieren.

Und natürlichwe’ll need a properties file, um die Werte zu definieren, die mit der Annotation@Value eingefügt werden sollen. Daher müssen wir zuerst ein@PropertySource in unserer Konfigurationsklasse definieren - mit dem Namen der Eigenschaftendatei.

Definieren wir die Eigenschaftendatei:

value.from.file=Value got from the file
priority=Properties file
listOfValues=A,B,C

3. Anwendungsbeispiele

Als grundlegendes und meist nutzloses Anwendungsbeispiel können wir nur „Zeichenfolgenwert“ aus der Annotation in das Feld einfügen:

@Value("string value")
private String stringValue;

Die Verwendung der Annotation@PropertySource ermöglicht es uns, mit Werten aus Eigenschaftendateien mit der Annotation@Valuezu arbeiten. Im folgenden Beispiel werden dem Feld“Value got from the file” zugewiesen:

@Value("${value.from.file}")
private String valueFromFile;

Wir können den Wert auch über Systemeigenschaften mit derselben Syntax festlegen. Nehmen wir an, wir haben eine Systemeigenschaft mit dem NamensystemValue definiert und sehen uns das folgende Beispiel an:

@Value("${systemValue}")
private String systemValue;

Für Eigenschaften, die möglicherweise nicht definiert sind, können Standardwerte angegeben werden. In diesem Beispiel wird der Wert“some default” injiziert:

@Value("${unknown.param:some default}")
private String someDefault;

Wenn dieselbe Eigenschaft als Systemeigenschaft und in der Eigenschaftendatei definiert ist, wird die Systemeigenschaft angewendet.

Angenommen, wir hätten eine Eigenschaftpriority als Systemeigenschaft mit dem Wert“System property” definiert und als etwas anderes in der Eigenschaftendatei definiert. Im folgenden Code wäre der Wert“System property”:

@Value("${priority}")
private String prioritySystemProperty;

Manchmal müssen wir eine Reihe von Werten hinzufügen. Es ist praktisch, sie als durch Kommas getrennte Werte für die einzelne Eigenschaft in der Eigenschaftendatei oder als Systemeigenschaft zu definieren und in ein Array einzufügen. Im ersten Abschnitt haben wir durch Kommas getrennte Werte inlistOfValues der Eigenschaftendatei, definiert, sodass im folgenden Beispiel die Array-Werte[“A”, “B”, “C”]: wären

@Value("${listOfValues}")
private String[] valuesArray;

4. Fortgeschrittene Beispiele mit SpEL

Wir können auch SpEL-Ausdrücke verwenden, um den Wert zu erhalten. Wenn wir eine Systemeigenschaft mit dem Namenpriority, haben, wird ihr Wert im nächsten Beispiel auf das Feld angewendet:

@Value("#{systemProperties['priority']}")
private String spelValue;

Wenn wir die Systemeigenschaft nicht definiert haben, wird der Wert vonnullzugewiesen. Um dies zu verhindern, können wir im Ausdruck SpEL einen Standardwert angeben. Im folgenden Beispiel erhalten wir den Wert von“some default”für das Feld, wenn die Systemeigenschaft nicht definiert ist:

@Value("#{systemProperties['unknown'] ?: 'some default'}")
private String spelSomeDefault;

Außerdem können wir einen Feldwert aus anderen Beans verwenden. Angenommen, wir haben eine Bean namenssomeBean mit einem FeldsomeValue gleich10. Dann werden in diesem Beispiel10 dem Feld zugewiesen:

@Value("#{someBean.someValue}")
private Integer someBeanValue;

Wir können Eigenschaften manipulieren, umList von Werten zu erhalten. Im folgenden Beispiel wird eine Liste der Zeichenfolgenwerte A, B und C angezeigt:

@Value("#{'${listOfValues}'.split(',')}")
private List valuesList;

5. Verwenden von@Value mitMaps

Wir können auch die Annotation@Value verwenden, um die EigenschaftMapeinzufügen.

Zuerst müssen wir die Eigenschaft in der\{key: ‘value' } -Form in unserer Eigenschaftendatei definieren:

valuesMap={key1: '1', key2: '2', key3: '3'}

Beachten Sie, dass die Werte inMap in einfachen Anführungszeichen stehen müssen.

Jetzt können wir diesen Wert alsMap aus der Eigenschaftendatei einfügen:

@Value("#{${valuesMap}}")
private Map valuesMap;

Wenn wirto get the value of a specific key inMap benötigen, müssen wir nuradd the key’s name in the expression tun:

@Value("#{${valuesMap}.key1}")
private Integer valuesMapKey1;

Wenn wir nicht sicher sind, obMap einen bestimmten Schlüssel enthält, sollten wira safer expression that will not throw an exception but set the value to null auswählen, wenn der Schlüssel nicht gefunden wird:

@Value("#{${valuesMap}['unknownKey']}")
private Integer unknownMapKey;

Wir können auchset default values for the properties or keys that might not exist:

@Value("#{${unknownMap : {key1: '1', key2: '2'}}}")
private Map unknownMap;

@Value("#{${valuesMap}['unknownKey'] ?: 5}")
private Integer unknownMapKeyWithDefaultValue;

Map entries can also be filtered vor der Injektion. Nehmen wir an, wir müssen nur die Einträge abrufen, deren Werte größer als eins sind:

@Value("#{${valuesMap}.?[value>'1']}")
private Map valuesMapFiltered;

Wir können auch die Annotation@Value zuinject all current system properties: verwenden

@Value("#{systemProperties}")
private Map systemPropertiesMap;

6. Fazit

In diesem kurzen Tutorial haben wir die verschiedenen Möglichkeiten untersucht, die Annotation@Valuemit einfachen, in der Datei definierten Eigenschaften, mit Systemeigenschaften und mit mit SpEL-Ausdrücken berechneten Eigenschaften zu verwenden.

Wie immer ist die Beispielanwendungon GitHub project verfügbar.