【问题标题】:What features does EJB3 bring and also how does EJB3 stack up with the Spring Framework? [closed]EJB3 带来了哪些特性,以及 EJB3 如何与 Spring 框架叠加? [关闭]
【发布时间】:2011-05-29 16:53:31
【问题描述】:

我从来没有在ejb工作过,当我开始编程时Spring已经到了,我所有的项目都只和Spring合作,最近我有一次面试,他们想知道EJB3.0所以我想知道EJB3.0 stack up with Spring Framework 是怎么做的以及为什么现在很多项目都使用Spring Framework and not with EJB3.0不要在这里引用我,因为我可能是错的

如果可以从实际角度解释使用一种方法的区别和好处,我将不胜感激。

注意请不要给出 wiki 链接作为答案,因为我想了解这两种技术实际上是如何叠加的。

更新另外,什么是开始学习 EJB3 的最佳方式,推荐的书籍,在线教程是什么?

【问题讨论】:

    标签: java spring ejb-3.0 ejb


    【解决方案1】:

    EJB 是一项相当古老的技术(约 1999 年)。然而,在标准的第 3 版之前,使用起来非常不方便。 Spring 作为一种理智的替代品变得流行起来,它提供了一些相同的核心特性(声明性事务和安全性)以及一些新特性(依赖注入、AOP)。它还与 Hibernate 等许多其他技术很好地集成。

    然而,从 V3.0 开始,EJB(或者更确切地说,EJB 是其中一部分的整个 Java EE 平台)进行了重大改进,变得更易于使用。此外,许多由各种框架(包括 Spring)流行起来的特性都被纳入官方标准并添加到 Java EE 中。

    目前,Java EE 平台在流行度方面与 Spring 相比正在取得很大进展,因为它们在易用性和功能方面几乎相同,而且 Java EE 具有基于开放标准的优势大多数组件的多种实现。同时,在我看来,Spring 在与其他框架集成(这曾经是它的强项)方面遇到了跟上最先进技术的问题。

    【讨论】:

    • 那么依赖注入在 EJB3 中是如何完成的,实际上我正在尝试将 EJB3 与 Spring 进行比较,看看我是否能在堆栈和一些基础知识之间找到共同点,这将有助于我开始理解 EJB3 技术
    • @Rachel:EJB3 依赖注入是基于注解的,使用 XML 配置作为后备。它使用 JSR-250 注释和一些特定于 EJB 的注释。实际上,EJB3 中的几乎所有内容都是基于注释的,并以 XML 配置作为后备。相信是受了Spring的启发,所以应该很熟悉吧。
    • 您是否介意详细说明“在我看来,在与其他框架集成时,Spring 在跟上最先进的技术时遇到了问题”是什么意思?这是一个非常笼统的说法,具体是什么让您有这种印象?
    • @kdonald:例如,最新的 Spring 版本默认集成了 Hibernate 3.3.1 - 已经超过 2 年了。
    • @kdonald:这就是 Spring 的“我们将为您进行集成”方法的问题 - 它直接导致更新跑步机。 Java EE 方法是“让我们定义一个标准并通过坚持标准 API 进行集成”——这不是每个人都能做到的,并且会导致其自身的限制,但肯定更具可扩展性。
    【解决方案2】:

    我想说唯一的主要区别是 Java EE 5 和 6 是一个标准。它采用了 Spring 和其他人的想法,并从中创建了一个标准。与旧的 EJB 相比,EJB3 不分昼夜。您所有的 EJB 都是 POJO,并且依赖项由容器注入。所有这些不同的界面和从主界面手动创建实例都一去不复返了。如果您已经对 Spring 做了很多工作,最多可能需要几个小时来了解。如果您正在开发 Web 应用程序,您还需要查看 JSF。

    我从来没有用旧的 EJB 做过真正的应用程序,因为那太痛苦了。 EJB3 我一直在使用,因为它很轻松。如果您想尝试最新的一切,请获取 glassfish 的副本,我认为它仍然是唯一通过 Java EE 6 认证的服务器。

    【讨论】:

    • 那么不知道或不使用 EJB 会不会影响学习 EJB 3?
    • 尽量不要使用jsf。现在几乎没有标准,你最终会陷入 impl 锁定。
    • @Steven:你能说得更具体点吗?我现在正在开始一个 JSF 项目,在我看来,基本的 JSF 实现是标准化的,并且实现得非常好。确实,组件库试图通过新功能来区分自己,并且使用这些功能当然会将您与该库联系起来。
    • 我想说不使用旧的 EJB 将有助于学习 EJB3。这是完全不同的,所以试图看看它与旧东西的关系只会让你慢下来。
    【解决方案3】:

    在依赖注入和 MVC 架构方面,Spring 在灵活性和易用性方面都优于 Java EE 5,尽管正如其他人所说,Java EE 5 (EJB3) 比以前版本的Java EE/EJB。在 Java EE 6 中,我相信 Java EE 在带有新 CDI (JSR-299) 实现的 DI 和带有 JSF 2.0 的 MVC 方面都超越了 Spring。

    Oracle 在线教程是初级的,但却是学习 Java EE 的良好起点。 Reza Rahman 的系列文章http://www.theserverside.com/news/1373391/Dependency-Injection-in-Java-EE-6-Part-1

    是学习 Java EE 6 中 DI 的绝佳资源

    【讨论】:

    • 我无法理解JEE 6 has leapt ahead with JSF on MVC Architecture ?以前没用过JSF,所以没看明白,能不能说的详细点?
    • JSF 是一种组件技术,因此从某种意义上说,它一直是一种比 Struts、Spring MVC 等请求驱动的框架更现代的方法。但是 JSF 从一开始也受到问题的困扰- 主要是复杂性。在 JSF 2.0 中,他们似乎终于做对了——主要是因为他们大量借鉴了 Seam。现在看看 JEE6 堆栈,它从数据层到表示高度集成(他们现在使用的 Facelets 比 JSP 干净得多——这几乎就是你在 Spring 上仍然卡住的东西)。但是 JEE6 的采用需要时间。
    • Spring 支持多种视图选项,包括 JSP、Freemarker、Velocity、 JSF。视图处理基础设施是可扩展的,您也可以插入您自己的自定义选项。您不会在 Spring 上使用 JSP。
    • JSF 不是一种渲染技术,它是一个 MVC 框架。 Freemarker 和 Velocity 是简单的模板工具,它们不像 JSP 和 Facelets 那样成熟的渲染技术。您可以使用带有 Spring MVC 的 Facelets,但这是非常先进的,并且没有太多的直接支持,而 JSF 2.0 是为了与 Facelets 集成而编写的。如果你打算使用 JSF 2.0,你肯定会选择 CDI,它是通过 Spring DI 进行代码签名的。
    • 我认识的使用 JSF 2.0 的开发人员都在使用 CDI,没有一个使用 Spring。与 Facelets 相同,我只知道 2 个人在使用它,但他们都在使用它与 JSF。 CDI 和 JSF 2.0 针对 Facelets 进行了代码设计和构建。这很有意义。
    猜你喜欢
    • 1970-01-01
    • 2011-09-30
    • 1970-01-01
    • 1970-01-01
    • 2013-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-29
    相关资源
    最近更新 更多