Ответ
@ConfigurationProperties — это механизм в Spring Boot для типобезопасной привязки свойств из внешних источников (.properties, .yml, переменные окружения) к Java-объектам.
Базовый пример:
- Создание класса-держателя свойств:
@Component @ConfigurationProperties(prefix = "app.mail") // Связывает свойства с префиксом app.mail @Validated // Включает валидацию JSR-303 public class MailProperties { @NotNull private String host; private int port = 587; // Значение по умолчанию private boolean authEnabled; private List<String> recipients = new ArrayList<>(); // Обязательны геттеры и сеттеры public String getHost() { return host; } public void setHost(String host) { this.host = host; } // ... остальные геттеры/сеттеры } - Определение свойств в
application.yml:app: mail: host: smtp.example.com port: 465 auth-enabled: true recipients: - admin@example.com - alert@example.com -
Использование в сервисе:
@Service public class NotificationService { private final MailProperties mailProps; public NotificationService(MailProperties mailProps) { this.mailProps = mailProps; System.out.println("Mail host: " + mailProps.getHost()); } }
Способы активации (альтернативы @Component):
- Через
@EnableConfigurationPropertiesв классе конфигурации:@Configuration @EnableConfigurationProperties(MailProperties.class) public class AppConfig { } - Явная регистрация бина с
@Bean.
Ключевые особенности:
- Релоад конфигурации: В сочетании с
@RefreshScope(Spring Cloud) позволяет обновлять свойства без перезапуска приложения. - Вложенные свойства: Поддерживает сложные объекты и
Map. - Конвертация типов: Автоматически конвертирует строки в типы (
Duration,DataSize, пользовательские конвертеры). - Метаданные: Генерация
spring-configuration-metadata.jsonдля IDE-подсказок.
Преимущество над @Value: Централизация, валидация, реюзабельность и работа со сложными структурами данных.