Ответ
XML-конфигурация считается устаревшей и неудобной по сравнению с Java/Annotation-based конфигурацией из-за своей избыточности, отсутствия типобезопасности и сложности рефакторинга.
Основные недостатки:
-
Избыточный синтаксис (boilerplate): Много закрывающих тегов, атрибутов.
<!-- XML (громоздко) --> <bean id="userService" class="com.example.UserService"> <property name="userDao" ref="userDao"/> <property name="timeout" value="5000"/> </bean>// Java Config (лаконично и типобезопасно) @Configuration public class AppConfig { @Bean public UserService userService(UserDao userDao) { UserService service = new UserService(userDao); service.setTimeout(5000); return service; } } -
Отсутствие типобезопасности (type-safety):
- Ошибки (опечатки в именах классов, свойств) обнаруживаются только во время выполнения (runtime).
- Нет помощи IDE (автодополнение, навигация по коду, проверка типов).
-
Сложность рефакторинга:
- Переименование класса или свойства в Java-коде не обновляет автоматически XML.
- Приходится вручную искать и править все упоминания в XML-файлах.
-
Плохая читаемость: Большие XML-файлы сложно воспринимать визуально, связи между бинами неочевидны.
Когда XML ещё может использоваться?
- В legacy-проектах.
- Когда конфигурация должна изменяться без перекомпиляции (но эту роль теперь часто выполняют YAML, свойства или внешние сервисы).
- Для строгой валидации через XSD-схемы.
Современная альтернатива в Spring: Используйте @Configuration, @Bean, @ComponentScan и аннотации внедрения зависимостей (@Autowired, @Inject).