it-swarm.com.de

Ist CDI ein guter Ersatz für Spring?

Wir planen, eine Webanwendung von Grund auf neu zu schreiben. Wir haben uns für die neueste Version von Glassfish entschieden, die dem Java EE 6-Standard entspricht. Daher prüfen wir, ob CDI verwendet werden kann statt Frühling.

Können wir sagen, dass CDI ein Ersatz für Spring sein könnte?

67
prassee

CDI steht für "Context and Dependency Injection", während Spring ein komplettes Ökosystem rund um einen Dependency Injection Container ist. Um beide zu vergleichen, müssen Sie den Vergleich differenzieren.

Die Abhängigkeitsinjektion wird von beiden Containern verarbeitet. Der Hauptunterschied ist die Tatsache, dass CDI DI dynamisch (aka: stateful) behandelt - dies bedeutet, dass Abhängigkeiten zum Ausführungszeitpunkt aufgelöst werden. Der Ansatz von Spring ist statisch - das bedeutet, dass Komponenten zum Erstellungszeitpunkt 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 mit dem Hintergrund von zwei produktiven CDI-Apps).

Betrachtet man das Ökosystem , sieht die Situation anders aus: Der Frühling kommt gebündelt mit viel Gläsern (> 150 ), während CDI für sich genommen ziemlich klein ist. Eine typische CDI-Verwendung befindet sich in einem Java EE 6-Anwendungsserver, kann jedoch problemlos in einer Servlet-Engine oder sogar Java SE) ausgeführt werden. Das bedeutet, dass Sie bei der Verwendung von CDI nicht davon ausgehen müssen, dass Sie Hibernate, JPA, EJB oder was auch immer verwenden - das liegt bei Ihnen.

Wenn Sie mehr Funktionalität benötigen, wird CDI mit dem Konzept portabler Erweiterungen ausgeliefert (wodurch sich die API von selbst 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 nichts anderes ist als ein "Ersatz" für das Spring-Ökosystem, sondern vielmehr eine Verbesserung gegenüber dem Abhängigkeitsinjektionsmechanismus von Spring. Es ist Teil von Java EE 6, also wenn Sie auf einem GlasFish mit Java EE 6 sind, sollten Sie sich definitiv für CDI entscheiden. In meinen Augen ist 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 bekommen ...

92
jan groth

Frühling ist mehr als nur ein abhängiger Injektionsbehälter. Es enthält außerdem Tools für AOP, Vorlagen zur Verwendung mit JPA, SQL usw. und vieles mehr.

CDI kann jedoch als Ersatz für die DI-API von Spring verwendet werden.

10
Behrang

Ich verwende Apache OpenWebBeans als CDI-Implementierung und MyFaces CODI als portable Erweiterung für mehrere Projekte. Ich bin sehr zufrieden damit und hatte keine Probleme damit. In OpenWebBeans fehlt derzeit einiges an Dokumentation, aber wenn Sie nicht in der Lage sind, etwas zum Laufen zu bringen, können Sie die von MyFaces bereitgestellten Maven-Archetypen verwenden, um einfache Projekte mit allen erforderlichen Abhängigkeiten zu generieren, oder Sie fragen auf der Mailingliste. Es ist großartig, wenn Sie nur an Ihrer Anwendung arbeiten und nicht von bösen Fehlern geblockt werden. Ich habe auch viele Projekte mit Spring gemacht. Es ist in Ordnung, aber wenn Sie fragen, was ich für das nächste Projekt verwenden würde, lautet die klare Antwort OpenWebBeans und CODI! Ich bevorzuge OpenWebBeans gegenüber Weld, da OpenWebBeans sehr anpassungsfähig ist. Das ist großartig, weil Sie mehr oder weniger alles anpassen können, was nicht von der offiziellen CDI-API/SPI abgedeckt wird und die Laufzeitleistung besser ist. Und nach dem ersten Projekt würde ich CODI nie wieder in Frage stellen, weil es sehr stabil ist, sie regelmäßig veröffentlicht werden und die meisten von ihnen großartige neue Funktionen mitbringen, die die Produktivität erheblich verbessern. CODI ist meiner Meinung nach der Ort, der am stabilsten ist und aus dem die meisten Innovationen im gesamten CDI-Land stammen.

Zur Beantwortung Ihrer Frage: Für mich hat CDI Spring komplett abgelöst, aber Sie benötigen tragbare Erweiterungen, die die Lücken füllen. CDI war standardmäßig nicht dazu gedacht, alles zu lösen, und einige Teile, wie die Gespräche, sind vom Design her defekt. Die gute Nachricht ist, dass Sie großartige Projekte wie MyFaces CODI haben. CODI behebt fast alle diese Probleme.

4
Dar Whi