Answers:
Spring从一开始就被开发为EJB的替代品,因此答案当然是您可以使用Spring代替EJB。
如果说使用EJB有“优势”,我想这将取决于您团队的技能。如果您没有Spring专业知识,并且拥有丰富的EJB经验,那么坚持使用EJB 3.0是一个不错的选择。
从理论上讲,为支持EJB标准而编写的应用服务器可以从一台兼容的Java EE应用服务器移植到另一台。但这意味着远离任何将您锁定在一个供应商中的供应商特定扩展。
Spring不依赖于它们,因此可以轻松地在应用程序服务器(例如WebLogic,Tomcat,JBOSS等)之间移植。
但是,您被锁定在Spring中。
Spring鼓励采用良好的OO设计规范(例如,界面,层次,关注点分离),使他们接触的任何问题都受益,即使您决定改用Guice或其他DI框架。
更新:该问题和答案在2014年已有5年历史了。需要说明的是,那时编程和应用程序开发的世界已发生了很大变化。
它不再只是在Java或C#,Spring或EJB之间进行选择。使用vert.x可以完全避开Java EE。您可以在没有应用服务器的情况下编写高度可扩展的多语言应用程序。
更新:现在是2016年3月。Spring Boot提供了一种无需Java EE应用程序服务器即可编写应用程序的更好方法。您可以创建一个可执行的JAR并在JVM上运行它。
我想知道Oracle是否会继续支持Java EE规范。Web服务已取代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有很多额外的优点,例如弹簧测试,AOP,MVC,JSF集成等。EJB具有其中的一些优点(例如,拦截器),但是我认为它们没有那么完善。
总之,这主要取决于您的具体情况。
EJBContainer.createEJBContainer()
使用嵌入式容器的标准API。因此,您的陈述仍然是错误的。
Spring是为了补充EJB,而不是替代它。Spring是EJB之上的一层。众所周知,EJB的编码是使用API完成的,这意味着我们必须使用Spring框架在API中实现所有功能。我们可以创建样板代码,然后只用该样板,向其中添加一些内容,然后一切就完成了。在内部,Spring与EJB连接- 没有EJB不会存在Spring。
使用Spring的主要优点是,类之间完全没有耦合。