comparison - EJB 3.1 或 Spring 3.. 什么时候选择哪一个?

标签 comparison ejb-3.0 ejb-3.1 spring-3

EJB 在 3.x 版本中实现了许多改进,Spring 也很常用,版本 3 是一个很好的替代方案。

网上有很多文章,但没有关于 ejb3x 与 spring3x 的精确比较。您对它们有什么想法吗?在现实世界的例子中,哪个在哪​​些条件下更好?

例如,我们想要将数据库和服务器分开,这意味着我们的应用程序将位于一台服务器上,我们的数据库将位于另一台服务器上。EJB 远程处理与 Cluster4Spring 等?

做每件事@Annotation总是好的?从来不需要配置?

最佳答案

对于应用程序在一台服务器上运行而数据库在另一台服务器上运行的用例,EJB 和 Spring 之间的选择是无关紧要的。每个平台都支持这一点,无论是 Java SE 应用程序、简单的 Servlet 容器(如 Tomcat 或 Jetty)、PHP、Ruby on Rails 还是其他平台。

您不需要任何类型的显式远程处理。您只需定义一个数据源,提供数据库服务器所在的 URL 即可。

也就是说,EJB 和 Spring Beans 确实使数据源的使用变得更加容易。它们都可以帮助您定义数据源、将其注入(inject)到 Bean 中并管理与其关联的事务。

在这两者中,EJB(以及一般的 Java EE)更加轻量级,并且更多地遵循约定优于配置的原则。 Spring 需要更多的冗长才能获得相同的东西,并且很大程度上依赖于 XML 文件,这些文件很快就会变得非常大且难以处理。硬币的另一面是 Spring 可能不那么神奇,在弄清楚你想要的所有内容后,你可能会感觉更有控制力。

另一个问题是EJB和Spring的开发方式。

EJB 是免费的(就像免费啤酒一样)、开源且非专有。非营利组织 (Apache)、开源公司 (Redhat/JBoss) 和深度商业化的闭源企业 (IBM) 都在实现 EJB。我个人会避免后者,但每个人都有自己的想法。

另一方面,Spring 是免费且开源的,但具有很强的专有性。只有一家公司在生产 Spring,那就是 Springsource。如果你不同意罗德的观点,那你就倒霉了。这不一定是坏事,但您可能需要注意其中的差异。

Doing everyting @Annotation is always good? configuration never needed?

这确实是一场无休止的争论。一些人认为 XML 难以维护,另一些人则认为注释污染了原本纯粹的 POJO 模型。

我认为使用注释将 bean 注释为 EJB 无状态 bean (@Stateless) 或 JPA 实体 (@Entity) 会更干净。 @EJB 或 @Inject 依赖注入(inject)也是如此。另一方面,我更喜欢将 JPQL 命名查询放在 XML 文件中而不是注释中,并且将表示纯配置数据(例如某些内容的最大值)的注入(inject)也放在 XML 中。

在 Java EE 中,每个注释也可以在 XML 中指定。如果注释和 XML 等效项同时存在,则 XML 会否决注释。这使得从默认情况下的注释开始变得非常方便,但稍后针对特定用例通过 XML 覆盖它。

当前 Java EE 中的偏好似乎更倾向于(简单)注释与大量约定优于配置的结合。

关于comparison - EJB 3.1 或 Spring 3.. 什么时候选择哪一个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7076144/

相关文章:

php - 比较日期 mysql php

python - 检查两个无序列表是否相等

java - Java 代码可以判断它是否在应用服务器中吗?

java - 为什么这个参数在我的 Bean 中作为 Null 发送?

java - 公开要在 View 中使用的 @Asynchronous 函数的当前进度

javascript - 比较 Javascript 中的两个数组 - 返回差异

java - 如何创建一个简单的 OSGI 模块

java - 资源在@Singleton @Predestroy 方法中不可用

jakarta-ee - Glassfish webapp 中的 EJB 注入(inject)

java - MVEL 无法按空比较的要求工作