Вступление:
Spring @Value аннотация используется для вставки значений в переменные и аргументы метода. Мы можем читать весенние переменные окружения или системные переменные. Он также поддерживает SpEL.
В этом кратком руководстве мы узнаем, как работать с аннотацией Spring @Value .
Настроить:
Начнем с определения нескольких свойств в нашем файле app.properties :
1
2
3
4
5
|
user.first.name=Sam user.stocks=50 user.address=California user.preferences=A,B,C products.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, являются их собственными. |