Статьи

Spring @Value Аннотация

Вступление:

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, являются их собственными.