Gymterview
junior

Как использовать @Value и @PropertySource?

@Value – аннотация для внедрения значений из внешних источников (файлы свойств, переменные окружения, SpEL-выражения) в поля или параметры бинов. @PropertySource – указывает файл свойств для загрузки.

Пример
@Configuration
@PropertySource("classpath:application.properties")
@PropertySource("classpath:db.properties")
public class AppConfig { }

Основные способы использования @Value

Пример
@Component
public class AppSettings {

    @Value("${app.name}")
    private String appName;                    // из properties

    @Value("${app.description:Default}")
    private String description;                // со значением по умолчанию

    @Value("${server.port}")
    private int serverPort;                    // автоматическое преобразование типов

    @Value("${JAVA_HOME}")
    private String javaHome;                   // переменная окружения

    @Value("#{T(java.lang.Math).random()}")
    private double randomValue;                // SpEL-выражение

    @Value("${app.servers}")
    private List<String> servers;              // список (app.servers=a,b,c)
}

Лучшая практика – @ConfigurationProperties (Spring Boot)

Для группы связанных свойств лучше использовать @ConfigurationProperties:

Пример
@Configuration
@ConfigurationProperties(prefix = "db")
public class DatabaseProperties {
    private String url;
    private int poolSize;
    // геттеры и сеттеры обязательны
}

На собеседовании: интервьюер хочет услышать про значения по умолчанию, SpEL и @ConfigurationProperties как альтернативу @Value. Частая ошибка – использовать @Value в статических полях (не работает) или забыть значение по умолчанию (приложение не запустится, если свойство не найдено).