Ответ
XML-конфигурация может потребоваться для изменения или дополнения Java-конфигурации в следующих случаях:
- Интеграция со сторонними библиотеками или legacy-кодом, которые требуют объявления бинов именно в XML (например, некоторые конфигурации Spring Security или сложные AOP-срезы).
- Динамическое изменение конфигурации без перекомпиляции. XML-файлы можно редактировать во время выполнения (например, в WAR-архиве) и перезагружать контекст.
- Удобство управления внешними свойствами. Проще выносить изменяемые параметры (строки подключения, пути) в отдельный XML с поддержкой
${property}placeholder.
Пример: Переопределение Java-бина через XML для подключения внешних свойств
Java-конфигурация (AppConfig.java):
@Configuration
public class AppConfig {
@Bean
public DataSource dataSource() {
return new DriverManagerDataSource("jdbc:h2:mem:test");
}
}
XML-конфигурация (override-config.xml):
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context">
<!-- Загрузка внешних свойств -->
<context:property-placeholder location="file:/config/db.properties"/>
<!-- Переопределение бина dataSource -->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="url" value="${database.url}"/>
<property name="username" value="${database.user}"/>
</bean>
</beans>
При запуске контекста с обоими конфигами, бин из XML переопределит бин из Java-конфигурации.