Ответ
В Spring порядок загрузки конфигураций определяется их приоритетом и историческим контекстом. XML загружается первым, чтобы Java/Annotation-based конфигурация могла его переопределить.
Основные причины:
- Исторический порядок: Spring начинался с XML. Конфигурация через
ClassPathXmlApplicationContextобрабатывает XML до сканирования аннотаций. - Принцип переопределения: Более высокоуровневая (аннотационная) конфигурация имеет приоритет над низкоуровневой (XML). Это позволяет задать базовые бины в XML и точечно менять их в
@Configuration-классах.
Пример:
<!-- applicationContext.xml -->
<bean id="myService" class="com.example.DefaultService"/>
@Configuration
public class AppConfig {
@Bean
public Service myService() {
// Этот бин переопределит бин из XML
return new CustomServiceImpl();
}
}
Важно: Это поведение по умолчанию. Порядок можно контролировать с помощью @Import, @ImportResource и порядка объявления конфигурационных классов.