Существуют различные подходы к DI в Java, и не все они обязательно основаны на xml.
Spring
Spring обеспечивает полную реализацию контейнера и интеграцию со многими службами (транзакции, jndi, постоянство, источники данных, mvc, планирование, ...) и может фактически быть лучше определен с помощью аннотаций java.
Его популярностьвытекает из количества сервисов, которые интегрирует платформа, кроме DI (многие люди используют его как альтернативу Java EE , которая фактически следует по пути весны, начиная с 5-го издания).
XML был исходным выбором для spring , потому что это был де-факто стандарт Java-конфигурации, когда появилась платформа.В настоящее время аннотации - это популярный выбор.
Как личность, концептуально я не большой поклонник DI на основе аннотаций, для меня это создает тесную связь конфигурации и кодаТаким образом, победив основную исходную цель DI .
, существуют другие реализации DI , поддерживающие объявление альтернативной конфигурации: AFAIK Google Guice isодин из тех, которые допускают программную настройку.
DI и Scala
Существуют альтернативные решения для DI в Scala, вдополнение к использованию известных Java-фреймворков (которые, насколько я знаю, довольно хорошо интегрируются).
Для меня наиболее интересным, поддерживающим привычный подход к Java, является subcut .
Он обеспечивает хороший баланс между гугл-гайфом и одним из самых известных шаблонов DI, допускаемых конкретным дизайном языка scala: Cake Pattern .Вы можете найти множество сообщений в блоге и видео об этом шаблоне с помощью google search .
. Еще одним решением, доступным в Scala, является использование Reader Monad , которое уже является признаннымшаблон для динамической конфигурации в на Haskell и довольно хорошо объясняется в этом видео от NE Scala Symposium 2012 и в этом видео и связанных с ним слайдах .
Последний вариант связан с предупреждением о том, что он включает в себя приличный уровень знакомства с концепцией монад в целом и в scala, и часто вызывал некоторые споры вокруг его концептуальной сложности и практической полезности.Эта связанная нить в scala-дебатах ML может быть весьма полезной для лучшего понимания предмета.