Ответ
Приоритет имеет Java-конфигурация через @Configuration. Бин, объявленный в @Configuration-классе, переопределит бин с тем же именем (id/name), объявленный в XML.
Причина: Spring применяет конфигурацию в определённом порядке, и конфигурация на основе аннотаций (включая @Configuration) обрабатывается после XML. Последнее определение выигрывает.
Пример переопределения:
-
XML-конфигурация (
applicationContext.xml):<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> <!-- свойства --> </bean> -
Java-конфигурация (
AppConfig.java):@Configuration public class AppConfig { @Bean public DataSource dataSource() { // Этот бин заменит XML-определение return new HikariDataSource(); } }
Практическое применение: Это позволяет гибко управлять конфигурацией:
- Использовать XML для базовой или стандартной конфигурации.
- Переопределять специфичные бины или настройки для разных сред (dev/test/prod) с помощью
@Configuration-классов. - Важно избегать конфликтов имён, если переопределение не является целью.