Вступление:
Spring @Value аннотация используется для вставки значений в переменные и аргументы метода. Мы можем читать весенние переменные окружения или системные переменные. Он также поддерживает SpEL.
В этом кратком руководстве мы узнаем, как работать с аннотацией Spring @Value .
Настроить:
Начнем с определения нескольких свойств в нашем файле app.properties :
|
1
2
3
4
5
|
user.first.name=Samuser.stocks=50user.address=Californiauser.preferences=A,B,Cproducts.count={P1: '3', P2: '10', P3: '5'} |
Эти свойства мы будем использовать для примеров в этом уроке.
Также давайте быстро определим наш класс AppConfiguration :
|
1
2
3
4
5
6
|
@Configuration@PropertySource("classpath:app.properties")public class AppConfiguration { ...} |
Spring @Value — Основы:
Мы можем присвоить значение по умолчанию свойству класса с помощью аннотации @Value :
|
1
2
3
4
5
|
@Value("10")private int value; @Value("Hello World")private String msg; |
Обратите внимание, что он принимает только аргумент String, но переданное значение преобразуется в соответствующий тип во время введения значения.
Чтение переменных среды Spring:
Мы можем использовать аннотацию @Value для чтения переменной среды Spring:
|
1
2
|
@Value("${user.first.name}")private String userFirstName; |
Мы также можем прочитать список значений:
|
1
2
|
@Value("${user.preferences}")private String[] userPreferences; |
Давайте теперь попробуем прочитать карту значений ‘products.count’, используя аннотацию @Value :
|
1
2
|
@Value("#{${products.count}}")private Map<String, Integer> productsCount; |
Чтобы получить значение определенного ключа из карты , мы будем использовать:
|
1
2
|
@Value("#{${products.count}.P1}")private Integer p1Count; |
Чтение системных переменных:
С Spring @Value мы также можем читать системные переменные, либо напрямую:
|
1
2
|
@Value("${java.home}")private String javaHome; |
Или используя SpEL:
|
1
2
|
@Value("#{systemProperties['java.home']}")private String javaHome; |
Назначение значения по умолчанию:
Что если мы хотим назначить значение по умолчанию в случае отсутствия свойства? Да, мы можем сделать это, используя стандартную конструкцию аннотации Spring @Value :
|
1
2
|
@Value("${user.stocks:30}")private int stockCount; |
Здесь значение по умолчанию 30 будет присвоено stockCount, только если свойство file.stocks отсутствует в файле свойств.
Мы также можем назначить значение по умолчанию при работе с SpEL:
|
1
2
|
@Value("#{systemProperties['abc'] ?: 'default value'}")private String unknownSystemProperty; |
Внедрение значений в методы:
Помимо внедрения на основе поля, мы также можем использовать аннотацию @Value для метода:
|
1
2
3
4
|
@Value("${user.first.name}")public void setUserName(String userName) { this.userName = userName;} |
Если мы используем аннотацию @Value над методом, все его аргументы будут сопоставлены одному и тому же значению.
Если мы хотим ввести разные параметры в разные аргументы, мы можем использовать аннотацию @Value вместе с аргументами метода:
|
1
2
3
4
5
|
public void setUserDetails(@Value("${user.first.name}")String userName, @Value("${user.address}") String address) { this.userName = userName; this.address = address;} |
Вывод:
В этом руководстве мы рассмотрели различные способы использования аннотации @Value для ввода значений свойств. Мы можем использовать аннотацию @Value либо с полем, либо с методом.
|
Опубликовано на Java Code Geeks с разрешения Шубхры Шриваставы, партнера нашей программы JCG . Смотреть оригинальную статью здесь: Spring @Value Аннотация Мнения, высказанные участниками Java Code Geeks, являются их собственными. |