Spring vs EJB。 Spring可以取代EJB吗?

由于Spring能像EJB一样使用事务。 对我来说,Spring能够取代使用EJB的要求。 谁能告诉我什么是使用EJB的额外优势?

Spring从一开始就是作为EJB的替代品而开发的,所以当然你可以用Spring代替EJB。

如果使用EJB有一个“优势”,我会说这取决于你的团队的技能。 如果你没有Spring的专业知识和大量的EJB经验,那么坚持使用EJB 3.0是一个好的举措。

编写用于支持EJB标准的应用服务器在理论上可以从一个兼容的Java EE应用服务器移植到另一个。 但这意味着远离任何和所有特定于供应商的扩展,将您locking到一个供应商。

应用程序服务器(例如,WebLogic,Tomcat,JBOSS等)之间的Spring端口很容易,因为它不依赖于它们。

但是,你被锁在Spring中。

Spring鼓励良好的面向对象devise实践(例如,界面,层次,关注点分离),即使您决定切换到Guice或另一个DI框架,也会有利于他们所触及的任何问题。

更新:这个问答在2014年已经有五年了。需要说的是,编程和应用程序开发的世界在那个时代已经发生了很大的变化。

它不再是Java或C#,Spring或EJB之间的select。 使用vert.x可以完全避开Java EE。 您可以在不使用应用服务器的情况下编写高度可扩展的多语言应用程序。

更新:现在是2016年3月。 Spring Boot提供了一个更好的方式来编写没有Java EE应用程序服务器的应用程序。 您可以创build一个可执行的JAR并在JVM上运行它。

我想知道Oracle是否会继续支持Java EE规范。 Web服务已经接pipe了EJB。 EJB解决scheme已经死了。 (只是我的观点。)

首先,让我说清楚,我并不是说你不应该用Spring,但是因为你要求一些优点,所以至less有两个:

  • EJB 3是一个标准,而Spring不是(这是一个事实上的标准,但这不是一回事),在可预见的将来这不会改变。 虽然可以在任何应用程序服务器上使用Spring框架,但Spring应用程序被locking在Spring本身以及您select在Spring中集成的特定服务。

  • Spring框架位于应用程序服务器和服务库之上。 服务集成代码(如数据访问模板)驻留在框架中,并向应用程序开发人员公开。 相反,EJB 3框架集成到应用程序服务器中,服务集成代码封装在接口后面。 因此,EJB 3供应商可以通过在应用程序服务器级别工作来优化性能和开发人员体验。 例如,他们可以将JPA引擎与JTA事务pipe理紧密联系起来。 另一个例子是对EJB 3开发人员透明的集群支持。

虽然EJB 3并不完美,但仍然缺乏一些特性(例如注入像非简单POJO这样的非托pipe组件)。

帕斯卡的观点是有效的。 然而,有以下赞成spring。

  • EJB规范实际上有点松散,因此不同的应用服务器可以观察到不同的行为。 当然,对于大多数情况来说,情况并非如此,但对于一些“黑暗的angular落”我有这样的问题。

  • Spring有很多额外的好东西,比如spring-test,AOP,MVC,JSF集成等等.EJB有一些(比如拦截器),但是在我看来,它们并没有那么发达。

总之,这主要取决于你的具体情况。

Spring是为了补充EJB,而不是取代它。 Spring是EJB之上的一个层。 我们知道,EJB的编码是通过API完成的,这意味着我们必须使用Spring框架在API中实现所有的function。 我们可以创build锅炉代码,然后拿这个盘子,添加一些东西,然后一切都完成了。 内部Spring与EJB相连 – 没有 EJB, Spring就不存在。

使用Spring的主要优点是在类之间没有耦合。