Ну, говоря о Java, это звучит довольно просто ... Есть Spring с его DI, и если вы разрабатываете с использованием стека технологии Spring , то вы просто используете его DI :) Если вы используете другую технологию стек, то Spring не так просто интегрировать, и на самом деле вам это нужно? Существует Google Guice :) По сравнению с Spring, Guice - это все о DI, и в этом случае вам не нужно добавлять дополнительные библиотеки в путь к классам, возможно, некоторую дополнительную конфигурацию и т. Д. И Spring, и Guice реализовать тот же JSR 330 (Dependency Injection для Java) ... Ну, я думаю, довольно легко решить, что использовать, Spring или Guice.
С другой стороны, Java EE 6 поставляется с новым JSR 299 (контексты и внедрение зависимостей для Java; CDI ), основанным на JSR 330. Если вы собираетесь использовать сервер приложений, совместимый с Java EE 6, тогда стоит взглянуть на CDI, тогда вам не понадобятся дополнительные библиотеки, потому что сервер приложений уже понимает DI и заботится об этом. CDI позволяет вам зарабатывать больше, поскольку он размещен поверх JSR 330 и улучшает его.
Если вы по-прежнему не используете Spring / Guice, тогда лучше начать с CDI
UPDATE:
Забыл упомянуть: CDI теперь реализован проектом Weld (seamframework.org/Weld), он поддерживает популярные серверы, так что вы можете попробовать его прямо сейчас. JBoss AS 6 поставляется с ним.
Сравнение между Spring и Guice, а также советы, какие из них использовать: здесь и здесь