Da Spring in der Lage ist, Transaktionen wie EJB zu verwenden . Für mich ist Spring in der Lage, die Anforderung der Verwendung von EJB zu ersetzen. Kann mir jemand sagen, was die zusätzlichen Vorteile von EJB sind?
Spring wurde von Anfang an als Alternative zu EJB entwickelt. Die Antwort lautet also, dass Sie Spring anstelle von EJBs verwenden können.
Wenn die Verwendung von EJBs einen "Vorteil" hat, würde ich sagen, dass dies von den Fähigkeiten Ihres Teams abhängt. Wenn Sie keine Spring-Expertise und viel EJB-Erfahrung haben, ist es vielleicht ein guter Schritt, bei EJB 3.0 zu bleiben.
App-Server, die zur Unterstützung des EJB-Standards geschrieben wurden, können theoretisch von einem kompatiblen Java EE-App-Server auf einen anderen portiert werden. Dies bedeutet jedoch, dass Sie sich von allen herstellerspezifischen Erweiterungen fernhalten, die Sie an einen Anbieter binden.
Spring Ports leicht zwischen App-Servern (z. B. WebLogic, Tomcat, JBOSS usw.), da dies nicht von ihnen abhängt.
Sie sind jedoch an Spring gebunden.
Spring fördert gute OO-Entwurfspraktiken (z. B. Schnittstellen, Ebenen, Trennung von Bedenken), die jedem Problem zugute kommen, das sie berühren, selbst wenn Sie sich entscheiden, zu Guice oder einem anderen DI-Framework zu wechseln.
Update: Diese Frage und Antwort sind 2014 fünf Jahre alt. Es muss gesagt werden, dass sich die Welt der Programmierung und Anwendungsentwicklung in dieser Zeit stark verändert hat.
Es ist nicht mehr nur eine Wahl zwischen Java oder C #, Spring oder EJBs. Mit vert.x ist es möglich, Java EE vollständig zu vermeiden. Sie können hoch skalierbare, mehrsprachige Anwendungen ohne App-Server schreiben.
Update: Es ist jetzt März 2016. Spring Boot bietet eine noch bessere Möglichkeit, Anwendungen ohne Java EE-App-Server zu schreiben. Sie können eine ausführbare JAR erstellen und auf einer JVM ausführen.
Ich frage mich, ob Oracle die Java EE-Spezifikation weiterhin unterstützen wird. Webdienste haben für EJBs übernommen. Die EJB-Lösung ist tot. (Nur meine Meinung.)
Lassen Sie es mich zunächst klar sagen. Ich sage nicht, dass Sie Spring nicht verwenden sollten, aber da Sie nach einigen Vorteilen fragen, sind hier mindestens zwei davon:
EJB 3 ist ein Standard, während Spring kein Standard ist (es ist ein De-facto-Standard, aber das ist nicht dasselbe), und dies wird sich auf absehbare Zeit nicht ändern. Obwohl Sie das Spring-Framework mit jedem Anwendungsserver verwenden können, sind Spring-Anwendungen sowohl an Spring selbst als auch an die spezifischen Dienste gebunden, die Sie für die Integration in Spring auswählen.
Das Spring-Framework befindet sich über den Anwendungsservern und Servicebibliotheken. Service-Integrationscode (z. B. Datenzugriffsvorlagen) befindet sich im Framework und wird den Anwendungsentwicklern zur Verfügung gestellt. Im Gegensatz dazu ist das EJB 3-Framework in den Anwendungsserver integriert und der Service-Integrationscode ist hinter einer Schnittstelle eingekapselt. EJB 3-Anbieter können so die Leistung und Entwicklererfahrung optimieren, indem sie auf Anwendungsserverebene arbeiten. Beispielsweise können sie die JPA-Engine eng mit dem JTA-Transaktionsmanagement verknüpfen. Ein weiteres Beispiel ist die Clustering-Unterstützung, die für EJB 3-Entwickler transparent ist.
EJB 3 ist zwar nicht perfekt, es fehlen jedoch noch einige Funktionen (z. B. das Einfügen nicht verwalteter Komponenten wie einfacher POJOs).
quelle
Pascals Punkte sind gültig. Es gibt jedoch Folgendes zugunsten des Frühlings.
Die EJB-Spezifikation ist tatsächlich etwas locker, und daher können bei verschiedenen Anwendungsservern unterschiedliche Verhaltensweisen beobachtet werden. Dies wird natürlich in den meisten Fällen nicht zutreffen, aber ich hatte ein solches Problem für einige "dunkle Ecken".
Spring hat viele zusätzliche Extras wie Spring-Test, AOP, MVC, JSF-Integration usw. EJB hat einige davon (z. B. Interceptors), aber meiner Meinung nach sind sie nicht so weit entwickelt.
Zusammenfassend hängt es hauptsächlich von Ihrem genauen Fall ab.
quelle
EJBContainer.createEJBContainer()
API zur Verwendung eines eingebetteten Containers. Ihre Aussage ist also immer noch falsch.Der Frühling soll EJB ergänzen, nicht ersetzen. Der Frühling ist eine Schicht über EJB. Wie wir wissen, erfolgt die Codierung von EJB mithilfe der API. Dies bedeutet, dass wir alles in APIs mithilfe des Spring-Frameworks implementieren müssen. Wir können einen Kesselplattencode erstellen, dann einfach diese Platte nehmen, ein paar Sachen hinzufügen, dann ist alles erledigt. Intern ist Spring mit EJB verbunden - Spring würde ohne EJB nicht existieren.
Der Hauptvorteil der Verwendung von Spring besteht darin, dass zwischen den Klassen überhaupt keine Kopplung besteht.
quelle