Java Dependency injection: XML или аннотации

Аннотации становятся популярными. Spring-3 поддерживает их. CDI сильно зависит от них (я не могу использовать CDI без аннотаций, верно?)

Мой вопрос - почему?

Я слышал несколько вопросов:

  1. "Это помогает избавиться от XML". Но что плохого в xml? Зависимости декларативны по своей природе, а XML очень хорош для деклараций (и очень плох для императивного программирования). С хорошей IDE (например, idea) очень легко редактировать и проверять xml, не так ли?

  2. "Во многих случаях существует только одна реализация для каждого интерфейса". Это неправда! Почти все интерфейсы в моей системе имеют mock-реализацию для тестов.

Есть еще какие-нибудь проблемы?

А теперь мои плюсы XML:

  1. Вы можете внедрить что угодно куда угодно (не только код с аннотациями)

  2. Что мне делать, если у меня есть несколько реализаций одного интерфейса? Использовать квалификаторы? Но это заставляет мой класс знать, какая инъекция ему нужна. Это не очень хорошо для проектирования.

DI на основе XML делает мой код ясным: каждый класс не имеет представления об инъекциях, поэтому я могу конфигурировать и юнит-тестировать его любым способом.

Что вы думаете?

35
задан ColinD 14 February 2011 в 18:15
поделиться