2

我正在学习 Java EE 6。我已经看到它在此版本的总括规范中取得了多大的进步。EJB 3.1 比以前的版本更容易和更轻量级,CDI 令人惊叹。

我不熟悉 Spring,但我经常读到它提供了一些 Java EE 堆栈没有的简洁特性。然而,我现在还了解到,Java EE 已经赶上了,现在可以与 Spring 完全竞争。

我知道从两者中进行选择取决于许多因素,但如果我们只关注功能,比如最新趋势等。哪一个具有领先优势?Spring 3 可以提供一些资产 Java EE 6 堆栈不能吗?

另外,Seam 框架呢?根据我的阅读,它就像 Java EE 6,但有一些附加功能?

4

1 回答 1

6

随着时间的推移,JavaEE 在特性方面确实赶上了。

但是我多次偶然发现的一个因素是我长期以来一直更喜欢 Spring 的主要原因 - JavaEE 服务器和实现存在错误并且对开发人员不友好。这听起来像是在咆哮,但即使是最好的 JavaEE 6 - CDI(Weld impl)也有神秘的异常消息,并且给开发人员带来了困难(请参阅此处)。更不用说应用服务器 - 充满了非常丑陋的错误(我在使用 JBoss 5 的 3 小时内设法找到了大约 5 个错误)

让 spring 对我更有吸引力的另一件事是可以在小时间范围内添加功能。正如我在评论中提到的,统一缓存抽象和对话处理将在下一个 spring 版本中添加,这是上一个版本的几个月后。在 JavaEE 中,您必须等待很多时间(至少对于标准解决方案)

但是JavaEE并不是那么黑。许多问题都有解决方法或得到及时修复。最终,这是个人喜好的问题。

顺便说一句,与此同时,spring 的产品组合中充满了副项目,它们添加了许多特定的功能/功能集。请注意,它们中的许多也可以与 JavaEE 一起使用,但它们被设计为与 spring 完美匹配:

  • spring security - 声明式安全
  • spring roo - 快速引导项目的工具
  • spring web flow - MVC 之上的框架,用于处理类似向导的旅程
  • spring data - 仍然是新的,旨在统一对 NoSQL 存储的访问
  • spring mobile - 将 spring 带入移动平台
  • spring social - 一组与社交网络交互的工具

这只是额外的,JavaEE 也有额外的,但它们更通用(据我所见),除了 Seam,它专门针对提供 CDI 遗漏的东西。

要结束的一个非常重要的说明。将 spring 与 JavaEE 进行比较是不正确的。我更愿意将 Spring 与 CDI+EJB+Application 服务器进行比较。JavaEE 的其余部分可以与 spring 一起使用,而且通常是这样。JAX-WS、JAXB,甚至 JSF 都非常适合 spring 并且经常被使用。

于 2011-02-04T22:52:55.207 回答