Почему Java-конфигурация предпочтительнее XML в Spring?

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

Ответ

Java-конфигурация (использующая аннотации @Configuration, @Bean) стала стандартом в современных Spring-приложениях, вытесняя XML, благодаря следующим преимуществам:

Ключевые преимущества Java-конфигурации:

  1. Типобезопасность: Ошибки в именах бинов или классах обнаруживаются на этапе компиляции, а не во время выполнения приложения.
  2. Поддержка рефакторинга: IDE могут автоматически переименовывать классы и методы, на которые ссылается конфигурация.
  3. Лучшая читаемость и навигация: Конфигурация — это код на Java, который можно легко читать, искать по ссылкам и понимать.
  4. Мощь языка Java: Можно использовать условия, циклы, вызовы методов и всю логику Java для динамического определения бинов.
  5. Упрощённая конфигурация: Аннотации @ComponentScan, @PropertySource и автоконфигурация Spring Boot значительно сокращают объём явной конфигурации.

Пример Java-конфигурации:

@Configuration
@PropertySource("classpath:app.properties")
@ComponentScan("com.example.service")
public class AppConfig {

    @Value("${db.url}")
    private String dbUrl;

    @Bean
    public DataSource dataSource() {
        return new DriverManagerDataSource(dbUrl);
    }

    @Bean
    @Profile("prod") // Бин создаётся только для профиля "prod"
    public AdvancedService advancedService() {
        return new AdvancedService();
    }
}

XML-конфигурация теперь считается устаревшим подходом для новых проектов, хотя и поддерживается для обратной совместимости.