Spring 3,Java EE 6

arg*_*g20 2 comparison spring java-ee-6 spring-3

我正在学习Java EE 6.我已经看到它在这个版本的伞规范中取得了多大进展.EJB 3.1比以前的版本更容易,更轻量级,CDI非常棒.

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

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

那么,Seam框架呢?从我读到的它就像Java EE 6,但有一些补充?

Boz*_*zho 6

随着时间的推移,JavaEE确实赶上了功能.

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

使弹簧对我更具吸引力的另一个因素是可以在很短的时间内添加功能.正如我在评论中指出的那样,统一缓存抽象和会话处理将在春季的下一个版本中添加,这是在之前版本之后的几个月.在JavaEE中你必须等待很多时间(至少对于标准解决方案)

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

顺便说一下,spring的产品组合同时充满了侧面项目,这增加了许多特定的功能/特性集.请注意,其中许多也可以与JavaEE一起使用,但设计与spring完全匹配:

  • 弹簧安全 - 声明性安全
  • spring roo - 快速启动项目的工具
  • spring web flow - MVC的框架,用于处理类似向导的旅程
  • spring数据 - 仍然是新的,旨在统一访问NoSQL商店
  • spring mobile - 为移动平台带来弹簧
  • spring social - 一套与社交网络交互的工具

这只是额外的,JavaEE也有额外功能,但它们更通用(据我所见),除了Seam,它专门针对提供CDI未命中的内容.

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

  • 即将发布的版本将具有统一的缓存抽象,这非常重要.它还将具有会话管理(客户端和服务器端).我知道CDI有ConversationScoped,但我不确定如何在客户端处理它.Spring有@Value,易于处理属性,而JavaEE则没有(它有方法,但不是那么简单).好处是spring可以在很短的时间内添加功能.JavaEE不能. (2认同)