В каких сценариях XML-конфигурация Spring предпочтительнее Java-based конфигурации?

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

Ответ

XML-конфигурация в Spring сегодня в основном актуальна для поддержки legacy-кода, но есть несколько сценариев, где она может быть удобна:

1. Внешняя конфигурация без перекомпиляции: XML-файлы можно изменять и перезагружать во время выполнения (например, с помощью ClassPathXmlApplicationContext), что полезно для параметров среды, которые часто меняются.

2. Чёткое разделение кода и конфигурации: Конфигурация полностью вынесена из Java-кода, что может быть удобно для DevOps-инженеров.

3. Поддержка унаследованных проектов: Многие старые enterprise-приложения полностью сконфигурированы через XML.

4. Конфигурация, генерируемая инструментами: Некоторые инструменты (например, для интеграции) могут автоматически генерировать Spring XML.

Пример объявления бинов в XML:

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource"
          destroy-method="close">
        <property name="jdbcUrl" value="${db.url}"/>
    </bean>

    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <constructor-arg ref="dataSource"/>
    </bean>
</beans>

Важно: Для новых проектов стандартом является Java-based конфигурация (@Configuration), так как она типобезопасна, обеспечивает лучшую поддержку рефакторинга и позволяет использовать всю мощь Java.