В каких ситуациях удобнее применять разные типы конфигурации в Spring?

«В каких ситуациях удобнее применять разные типы конфигурации в Spring?» — вопрос из категории Архитектура, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Выбор типа конфигурации в Spring зависит от требований к гибкости, динамизму и разделению ответственности.

Тип конфигурации Лучшие сценарии применения Пример / Причина
Аннотации (@Configuration, @Bean) Фиксированная, типобезопасная конфигурация, известная на этапе компиляции. Основной современный подход. ```java

@Configuration public class DataConfig { @Bean public DataSource dataSource() { return new HikariDataSource(); } }


| **XML** | Legacy-проекты, необходимость изменения конфигурации без перекомпиляции, четкое отделение кода от конфига. | Удобно для внешнего переопределения бинов. |
| **Properties/YAML файлы** | Environment-specific настройки: порты, URL, строки подключения, флаги функциональности. | `application.yml`:
```yaml
server:
  port: 8081
datasource:
  url: jdbc:postgresql://localhost:5432/mydb
``` |
| **Программная конфигурация** | Сложная динамическая конфигурация, зависящая от условий runtime (например, профилей, свойств). | ```java
public class DynamicConfig implements BeanDefinitionRegistryPostProcessor {
    @Override
    public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) {
        // Динамическая регистрация бинов
    }
}
``` |

**Практический подход:** Часто используется **гибрид**: основная конфигурация через аннотации, а настройки, меняющиеся между средами (dev, prod), выносятся в `application.properties`/`application.yml`.