【发布时间】:2010-12-19 05:56:10
【问题描述】:
【问题讨论】:
【问题讨论】:
Spring 从一开始就是作为 EJB 的替代品而开发的,所以答案当然是您可以使用 Spring 来代替 EJB。
如果使用 EJB 有“优势”,我会说这取决于您团队的技能。如果您没有 Spring 专业知识,并且有大量 EJB 经验,那么坚持使用 EJB 3.0 可能是一个不错的举措。
为支持 EJB 标准而编写的应用服务器理论上可以从一个兼容的 Java EE 应用服务器移植到另一个。但这意味着远离将您锁定在一个供应商的任何和所有供应商特定的扩展。
应用服务器(例如,WebLogic、Tomcat、JBOSS 等)之间的 Spring 端口很容易实现,因为它不依赖于它们。
但是,您被锁定在 Spring 中。
Spring 鼓励良好的 OO 设计实践(例如,接口、层、关注点分离),即使您决定切换到 Guice 或其他 DI 框架,这些实践也会使他们触及的任何问题受益。
更新:这个问题和答案是 2014 年的五年。需要说的是,编程和应用程序开发的世界在那段时间发生了很大的变化。
它不再只是 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 有很多额外的好东西,比如 spring-test、AOP、MVC、JSF 集成等。EJB 有一些(例如拦截器),但在我看来,它们并没有那么发达.
总之,这主要取决于您的具体情况。
【讨论】:
EJBContainer.createEJBContainer() API 可以使用嵌入式容器。所以,仍然,你的说法是错误的。
Spring 旨在补充 EJB,而不是取代它。 Spring 是 EJB 之上的一层。众所周知,EJB 的编码是使用 API 完成的,这意味着我们必须使用 Spring 框架在 API 中实现所有内容。我们可以创建样板代码,然后拿那个板,添加一些东西,然后一切都完成了。在内部,Spring 与 EJB 相连——没有 EJB,Spring 就不会存在。
使用 Spring 的主要优点是类之间完全没有耦合。
【讨论】: