Эти типы дискуссий имеют тенденцию становиться религиозными, поэтому я буду избегать определения «главной цели» и семантики того, действительно ли тот или иной шаблон действительно и действительно выполняется.
Я стараюсь смотреть на это как на инструмент, который может предложить определенные функции. Например, использование Spring (DI) является хорошим способом разделения интерфейсов и реализаций. Пользователям определенного интерфейса не нужно знать, как создать реализацию (или где она находится). Это часто что-то хорошее. Использование Spring также предоставляет множество других возможностей: функции, управляемые AOP и AOP, такие как обработка транзакций, область действия и целый ряд готовых интеграций с другими средами и технологиями. Аннотации делают это проще, понятнее и лучше всего, мне не нужно их использовать там, где это не практично или невозможно - всегда есть возможность сконфигурировать его в XML.