2009-11-22 2 views

답변

175

스프링은 처음부터 EJB에 대한 대안으로 개발되었으므로 물론 EJB 대신 Spring을 사용할 수 있습니다.

EJB를 사용하는 데 "이점"이 있다면, 팀의 기술에 달려 있다고 말할 수 있습니다. Spring 전문 지식이없고 EJB 경험이 많다면 EJB 3.0을 고수하는 것이 좋습니다.

EJB 표준을 지원하도록 작성된 응용 프로그램 서버는 이론적으로 Java EE 응용 프로그램 서버 하나에서 다른 응용 프로그램 서버로 이식 할 수 있습니다. 그러나 이는 하나의 벤더에 당신을 묶어주는 모든 벤더 관련 확장 물을 피하는 것을 의미합니다.

WebLogic, Tomcat, JBOSS 등의 응용 프로그램 서버간에 포트를 쉽게 연결할 수 있기 때문에 쉽게 연결할 수 있습니다.

그러나 스프링에 고정되어 있습니다.

봄은 Guice 또는 다른 DI 프레임 워크로 전환하기로 결정한 경우에도 사용자가 만지는 모든 문제에 도움이되는 좋은 인터페이스 설계, 사례 (예 : 인터페이스, 계층, 관심사 분리)를 권장합니다.

업데이트 :이 질문과 답변은 2014 년 5 세입니다. 프로그래밍 및 응용 프로그램 개발의 세계는 그 당시 크게 변화했다고 할 수 있습니다.

더 이상 Java 또는 C#, Spring 또는 EJB 중에서 선택하지 않습니다. vert.x을 사용하면 Java EE를 모두 피할 수 있습니다. 앱 서버없이 확장 성이 높은 수개 응용 프로그램을 작성할 수 있습니다.

업데이트 : 2016 년 3 월입니다. Spring Boot는 Java EE 애플리케이션 서버없이 애플리케이션을 작성하는 훨씬 더 좋은 방법을 제공합니다. 실행 가능한 JAR을 작성하여 JVM에서 실행할 수 있습니다.

오라클이 Java EE 스펙을 계속 지원할 지 궁금합니다. 웹 서비스는 EJB를 대신합니다. EJB 솔루션이 작동하지 않습니다. (내 생각에.)

+7

위대한 설명. +1은 Google 또는 사양 링크를 언급하는 것이 아닙니다. – cbmeeks

+4

당신이 말하기에 너무 반가워요. 특히 대답이 3.5 세라고 생각하면 좋겠습니다. – duffymo

+5

내 의견으로는, "lock in"은 Spring을 설명하기에는 너무 강한 문구입니다. 결국, Spring은 모든 것을 묶어서 붙여 놓지 않고 디자인하기 때문에 언제든지 통합 할 항목을 선택할 수 있습니다. 게다가, 모든 것이 잠금 기능을 가지고 있습니다. 심지어 가장 간단한 Apache Commons도 우리를 잠그고 있지만, 우리는 여전히 그것을 매일 사용하고 있습니다. –

44

첫째, 여기, 당신은 몇 가지 장점을 요구하고 있기 때문에 당신이 봄을 사용하지만 안 말하는 그 중 적어도 두 가지 않을거야, 내가 명확하게 가정 해 봅시다 :

  • EJB 3 Spring은 표준이 아니지만 (사실상의 표준이지만 같은 것은 아닙니다) 예측 가능한 미래에는 변하지 않을 것입니다. Spring 프레임 워크를 모든 애플리케이션 서버와 함께 사용할 수 있지만, Spring 애플리케이션은 Spring 자체와 Spring에 통합하기로 선택한 특정 서비스 모두에 고정되어 있습니다.

  • 스프링 프레임 워크는 응용 프로그램 서버 및 서비스 라이브러리 위에 위치합니다. 서비스 통합 코드 (예 : 데이터 액세스 템플릿)는 프레임 워크에 있으며 응용 프로그램 개발자에게 노출됩니다. 반대로 EJB 3 프레임 워크는 응용 프로그램 서버에 통합되며 서비스 통합 코드는 인터페이스 뒤에 캡슐화됩니다. 따라서 EJB 3 공급 업체는 애플리케이션 서버 수준에서 작업함으로써 성능 및 개발자 경험을 최적화 할 수 있습니다. 예를 들어 JPA 엔진을 JTA 트랜잭션 관리와 밀접하게 연계시킬 수 있습니다. 또 다른 예로는 EJB 3 개발자에게 투명한 클러스터링 지원이 있습니다.

EJB 3,하지만 완벽하지 여전히 (단순 POJO를 같은 비 관리 구성 요소, 예를 들어 주입) 일부 기능이 부족하다.

+1

교육적인 대답,하지만 왜 당신이 간단한 POJO를 주입해야 할 때 새로운 것을 초기화해야하는지 궁금합니다. –

+3

테스트 용. – Philip

18

파스칼 포인트가 유효합니다. 그러나 봄에는 다음과 같은 것이있다.

  • EJB 사양은 실제로 약간 느슨해서 다른 응용 프로그램 서버에서 다른 동작이 관찰 될 수 있습니다. 이것은 물론 대부분의 경우 사실이 아니지만 일부 "어두운 구석"에 대해서는 이와 같은 문제가있었습니다.

  • 봄에는 스프링 테스트, AOP, MVC, JSF 통합 등과 같은 많은 추가 기능이 있습니다. EJB에는 이러한 기능 중 일부 (예 : 요격기)가 있지만 내 의견으로는 그렇게 많이 개발되지 않았습니다.

결론적으로, 그것은 당신의 정확한 경우에 주로 달려 있습니다.

+0

아마도 * Spring은 서블릿 엔진 만 필요합니다 * EJB는 더 정확합니다 (EJB는 모든 JEE 컨테이너, 서블릿 엔진에서 사용할 수 있습니다! = JEE 컨테이너). –

+1

기술적으로 스프링은 서블릿 엔진을 필요로하지 않습니다. 예를 들어 spring-test는 메모리 내 컨텍스트를 사용합니다. – Bozho

+3

기술적으로 EJB는 이런 식으로 독립형 컨테이너를 요구하지 않습니다. EJB 3.1 이후에는 임베디드 컨테이너를 사용하기위한 표준'EJBContainer.createEJBContainer()'API가있다. 그럼에도 불구하고 진술이 잘못되었습니다. –

-22

봄은 EJB를 보완하기위한 것이지 대체하는 것이 아닙니다. Spring은 EJB 위에있는 계층이다. 아시다시피, EJB의 코딩은 API를 사용하여 이루어 지므로 Spring 프레임 워크를 사용하여 API에 모든 것을 구현해야합니다. 우리는 보일러 플레이트 코드를 작성한 다음 그 플레이트를 가져 와서 몇 가지 물건을 추가하면 모든 것이 완료됩니다. 내부적으로 Spring은 EJB-과 연결되어있다. Spring은 EJB없이 존재하지 않을 것이다.

스프링을 사용하는 주된 이점은 클래스간에 전혀 연결이 없다는 것입니다.

+8

당신은 완전히 틀렸어. 미안. –

+2

죄송합니다. @sasi이게 정확하거나 좋은 대답이 아닙니다. ....... – Prakash

+4

"EJB 없이는 Spring이 존재하지 않습니다." 너 진짜 니? 자신의 인생에서 EJB의 선언에 "\ @Stateless"를 사용했거나 \ @EJB 주석을 주입에 사용 했습니까? 그들이 제티 (Jetty) 나 톰캣 (Tomcat)에서 일할 것이라고 생각하십니까? 거래가 봄에 어떻게 진행되고 있다고 생각하십니까? Spring 애플리케이션을 서블릿 컨테이너에 바로 배포 할 수 있다는 것을 알고 계십니까? – 99Sono

관련 문제