Spring był rozwijany jako alternatywa dla EJB od samego początku, więc odpowiedź brzmi: oczywiście możesz użyć Springa zamiast EJB.
Jeśli istnieje „zaleta” korzystania z EJB, powiedziałbym, że zależy to od umiejętności Twojego zespołu. Jeśli nie masz doświadczenia w Spring i masz duże doświadczenie w EJB, być może trzymanie się EJB 3.0 jest dobrym posunięciem.
Serwery aplikacji napisane w celu obsługi standardu EJB teoretycznie mogą być przenoszone z jednego zgodnego serwera aplikacji Java EE na inny. Oznacza to jednak trzymanie się z dala od wszelkich rozszerzeń specyficznych dla dostawcy, które ograniczają Cię do jednego dostawcy.
Sprężynuj łatwo porty między serwerami aplikacji (np. WebLogic, Tomcat, JBOSS itp.), Ponieważ nie zależy od nich.
Jednak jesteś zamknięty w Spring.
Spring zachęca do dobrych praktyk projektowania obiektów obiektowych (np. Interfejsów, warstw, separacji problemów), które przynoszą korzyść każdemu problemowi, którego dotykają, nawet jeśli zdecydujesz się przejść na Guice lub inny framework DI.
Aktualizacja: To pytanie i odpowiedź mają pięć lat w 2014 roku. Trzeba powiedzieć, że świat programowania i tworzenia aplikacji bardzo się zmienił w tym czasie.
Nie jest to już tylko wybór między Java lub C #, Spring lub EJB. Z vert.x to możliwe, aby unikać Java EE w ogóle. Możesz pisać wysoce skalowalne, poliglotowe aplikacje bez serwera aplikacji.
Aktualizacja: teraz jest marzec 2016 r. Spring Boot oferuje jeszcze lepszy sposób pisania aplikacji bez serwerów aplikacji Java EE. Możesz utworzyć wykonywalny plik JAR i uruchomić go na JVM.
Zastanawiam się, czy Oracle będzie nadal obsługiwać specyfikację Java EE. Usługi sieciowe przejęły funkcje EJB. Rozwiązanie EJB jest martwe. (Tylko moja opinia.)
Po pierwsze, powiem to jasno, nie mówię, że nie powinieneś używać Springa, ale ponieważ prosisz o kilka zalet, oto co najmniej dwie z nich:
EJB 3 jest standardem, a Spring nie (to de facto standard, ale to nie to samo) i nie zmieni się to w dającej się przewidzieć przyszłości. Chociaż możesz używać struktury Spring z dowolnym serwerem aplikacji, aplikacje Spring są zablokowane zarówno w samym Spring, jak i w konkretnych usługach, które zdecydujesz się zintegrować w Spring.
Struktura Spring znajduje się na szczycie serwerów aplikacji i bibliotek usług. Kod integracji usług (np. Szablony dostępu do danych) znajduje się w strukturze i jest udostępniany twórcom aplikacji. W przeciwieństwie do tego struktura EJB 3 jest zintegrowana z serwerem aplikacji, a kod integracji usług jest umieszczony za interfejsem. Dostawcy EJB 3 mogą zatem zoptymalizować wydajność i doświadczenie programisty, pracując na poziomie serwera aplikacji. Na przykład mogą ściśle powiązać silnik JPA z zarządzaniem transakcjami JTA. Innym przykładem jest obsługa klastrów, która jest niewidoczna dla programistów EJB 3.
EJB 3 nie jest jednak doskonały, nadal brakuje mu niektórych funkcji (np. Wstrzykiwania niezarządzanych komponentów, takich jak proste POJO).
źródło
Punkty Pascala są ważne. Istnieją jednak następujące zalety wiosny.
Specyfikacja EJB jest w rzeczywistości nieco luźna, dlatego można zaobserwować różne zachowania na różnych serwerach aplikacji. Oczywiście nie będzie to prawdą w większości przypadków, ale miałem taki problem w przypadku niektórych „ciemnych zakamarków”.
Spring ma wiele dodatkowych gadżetów, takich jak test sprężynowy, AOP, MVC, integracja JSF itp. EJB ma kilka z nich (na przykład przechwytywacze), ale moim zdaniem nie są one zbytnio rozwinięte.
Podsumowując, zależy to głównie od konkretnego przypadku.
źródło
EJBContainer.createEJBContainer()
interfejs API do korzystania z wbudowanego kontenera. Więc nadal, twoje stwierdzenie jest błędne.Sprężyna ma uzupełniać EJB, a nie go zastępować. Wiosna to warstwa na wierzchu EJB. Jak wiemy, kodowanie EJB odbywa się za pomocą API, co oznacza, że musimy implementować wszystko w API używając frameworka Spring. Możemy stworzyć kod boiler-plate, a następnie po prostu wziąć ten talerz, dodać do niego trochę rzeczy i wszystko jest gotowe. Wewnętrznie Wiosna jest połączona z EJB - Wiosna nie istniałaby bez EJB.
Główną zaletą używania Spring jest to, że nie ma żadnego powiązania między klasami.
źródło