답변:
Spring은 처음부터 EJB의 대안으로 개발되었으므로 대답은 물론 EJB 대신 Spring을 사용할 수 있다는 것입니다.
EJB 사용에 "장점"이 있다면 그것은 당신 팀의 기술에 달려 있다고 말하고 싶습니다. Spring에 대한 전문 지식이없고 EJB 경험이 많은 경우 EJB 3.0을 고수하는 것이 좋은 방법입니다.
이론적으로 EJB 표준을 지원하도록 작성된 앱 서버는 호환되는 하나의 Java EE 앱 서버에서 다른 서버로 이식 될 수 있습니다. 그러나 이는 하나의 공급 업체에 묶여있는 모든 공급 업체별 확장에서 벗어나는 것을 의미합니다.
Spring은 앱 서버 (예 : WebLogic, Tomcat, JBOSS 등)에 의존하지 않기 때문에 쉽게 포트를 연결할 수 있습니다.
그러나 당신은 Spring에 잠겨 있습니다.
Spring은 Guice 또는 다른 DI 프레임 워크로 전환하기로 결정한 경우에도 그들이 만지는 모든 문제에 도움이되는 좋은 OO 디자인 관행 (예 : 인터페이스, 레이어, 관심사 분리)을 권장합니다.
업데이트 :이 질문과 답변은 2014 년에 5 년이 지난 것입니다. 그 당시 프로그래밍 및 애플리케이션 개발의 세계가 많이 바뀌 었다고 말할 필요가 있습니다.
더 이상 Java 또는 C #, Spring 또는 EJB 중 하나의 선택이 아닙니다. vert.x를 사용하면 Java EE를 모두 피할 수 있습니다. 앱 서버없이 확장 성이 뛰어난 다중 언어 애플리케이션을 작성할 수 있습니다.
업데이트 : 이제 2016 년 3 월입니다. Spring Boot는 Java EE 앱 서버없이 애플리케이션을 작성하는 더 나은 방법을 제공합니다. 실행 가능한 JAR을 생성하고 JVM에서 실행할 수 있습니다.
Oracle이 Java EE 사양을 계속 지원할 것인지 궁금합니다. 웹 서비스가 EJB를 대신했습니다. EJB 솔루션이 죽었습니다. (그냥 내 의견입니다.)
먼저 명확하게 말하겠습니다. Spring을 사용하지 말아야한다는 말은 아니지만 몇 가지 이점을 요구하기 때문에 여기에 최소한 두 가지가 있습니다.
EJB 3은 표준이지만 Spring은 그렇지 않습니다 (사실상 표준이지만 동일한 것은 아닙니다). 이것은 가까운 미래에 변경되지 않을 것입니다. 모든 애플리케이션 서버에서 Spring 프레임 워크를 사용할 수 있지만 Spring 애플리케이션은 Spring 자체와 Spring에 통합하도록 선택한 특정 서비스 모두에 고정되어 있습니다.
Spring 프레임 워크는 애플리케이션 서버 및 서비스 라이브러리 위에 있습니다. 서비스 통합 코드 (예 : 데이터 액세스 템플릿)는 프레임 워크에 상주하며 애플리케이션 개발자에게 노출됩니다. 반대로 EJB 3 프레임 워크는 애플리케이션 서버에 통합되고 서비스 통합 코드는 인터페이스 뒤에 캡슐화됩니다. 따라서 EJB 3 공급 업체는 애플리케이션 서버 수준에서 작업함으로써 성능과 개발자 경험을 최적화 할 수 있습니다. 예를 들어, JPA 엔진을 JTA 트랜잭션 관리에 밀접하게 연결할 수 있습니다. 또 다른 예는 EJB 3 개발자에게 투명한 클러스터링 지원입니다.
EJB 3은 완벽하지는 않지만 여전히 일부 기능이 부족합니다 (예 : 간단한 POJO와 같은 관리되지 않는 구성 요소 삽입).
파스칼의 포인트는 유효합니다. 그러나 Spring에 찬성하는 다음이 있습니다.
EJB 사양은 실제로 약간 느슨하므로 다른 응용 프로그램 서버에서 다른 동작을 관찰 할 수 있습니다. 물론 대부분의 경우에는 해당되지 않지만 일부 "어두운 모서리"에 대해 그런 문제가있었습니다.
Spring에는 spring-test, AOP, MVC, JSF 통합 등과 같은 많은 추가 기능이 있습니다. EJB에는 이러한 기능 중 일부 (예 : 인터셉터)가 있지만 제 생각에는 많이 개발되지 않았습니다.
결론적으로, 그것은 주로 정확한 경우에 달려 있습니다.
EJBContainer.createEJBContainer()
임베디드 컨테이너를 사용하는 표준 API가 있습니다. 따라서 여전히 귀하의 진술은 잘못되었습니다.
Spring은 EJB를 대체하는 것이 아니라 보완하기위한 것입니다. Spring은 EJB 위에있는 레이어입니다. 아시다시피 EJB의 코딩은 API를 사용하여 수행됩니다. 즉, Spring 프레임 워크를 사용하여 API에서 모든 것을 구현해야합니다. 상용구 코드를 생성 한 다음 해당 플레이트를 가져 와서 여기에 몇 가지를 추가하면 모든 작업이 완료됩니다. 내부적으로 Spring은 EJB와 연결되어 있습니다. Spring은 EJB 없이는 존재할 수 없습니다.
Spring을 사용하는 가장 큰 장점은 클래스간에 결합이 전혀 없다는 것입니다.