CDI steht für "Kontext- und Abhängigkeitsinjektion", während Spring ein vollständiges Ökosystem um einen Abhängigkeitsinjektionsbehälter ist. Um beide zu vergleichen, müssen Sie den Vergleich unterscheiden.
Die Abhängigkeitsinjektion wird von beiden Containern übernommen. Der Hauptunterschied ist die Tatsache, dass CDI DI dynamisch (auch bekannt als Stateful) behandelt. Dies bedeutet, dass Abhängigkeiten zur Ausführungszeit aufgelöst werden . Der Ansatz von Spring ist statisch - dies bedeutet, dass die Komponenten zur Erstellungszeit miteinander verdrahtet werden . Während der CDI-Weg auf den ersten Blick etwas ungewöhnlich erscheint, ist er weit überlegen und bietet weitaus mehr und erweiterte Optionen (ich schreibe dies vor dem Hintergrund von zwei produktiven CDI-Apps).
Wenn Sie sich das Ökosystem ansehen , ist die Situation anders: Der Frühling wird mit vielen Gläsern (> 150) gebündelt , während der CDI für sich genommen ziemlich klein ist. Eine typische CDI-Verwendung befindet sich in einem Java EE 6-Anwendungsserver. Sie können sie jedoch problemlos in einer Servlet-Engine oder sogar in Java SE verwenden. Dies bedeutet, dass bei der Verwendung von CDI keine Annahme über die Verwendung von Hibernate, JPA, EJB oder was auch immer gemacht wird - das liegt bei Ihnen.
Wenn Sie mehr Funktionalität benötigen, wird CDI mit dem Konzept portabler Erweiterungen geliefert (wodurch sich die API lohnt). Es gibt unabhängige Erweiterungsmodule wie Apache CODI und Seam 3, die Themen wie Sicherheit, Mailing, Berichterstellung und mehr abdecken.
Zusammenfassend lässt sich sagen, dass CDI kein "Ersatz" für das Spring-Ökosystem ist, sondern vielmehr eine Verbesserung gegenüber dem Abhängigkeitsinjektionsmechanismus von Spring. Es ist Teil von Java EE 6, wenn Sie also mit Java EE 6 auf einem GlasFish sind, sollten Sie sich auf jeden Fall für CDI entscheiden. In meinen Augen lautet Ihre Frage eher: Kann ich Spring durch Java EE 6 ersetzen? Ich denke meine Antwort ist ziemlich offensichtlich ;-)
Schauen Sie sich Weld an, um einen guten Start zu haben ...