EJB、Hibernate、Spring和JSF之间有什么区别?

43

我对不同的Java框架很困惑。我想创建一个Java服务器项目来提供一些Restful web服务,但我真的不知道应该选择哪个框架。JSF、EJB、Hibernate和Spring之间有什么区别?请帮助我更好地了解它们。


7
根据你吃饭的地方不同,汉堡和马肉之间的差别可能没有你想象的那么大。 - Jason C
2
@JasonC 你说得有道理 ;) - Michael Laffargue
4个回答

56

这些是针对不同层的框架。

  • JSF 是用于视图(Web)层的,它是一个组件导向的框架(页面的每个部分都是一个组件,它有状态),类似于 Wicket 或 Tapestry,不同于像 Spring MVC、Struts 或 Stripes 这样的 Action 框架。

    书籍:Core JavaServer Faces (第三版)
    教程:CoreServlets.com

  • EJB 3.xJavaEE 技术栈中的一个容器。它可以执行依赖注入和 Bean 生命周期管理等操作。通常需要完整的 JavaEE 应用服务器来运行 EJB3。

    教程:JavaEE 6 教程:EJB
    书籍:EJB 3 in Action

  • Spring 也是一个容器,但 Spring 可以运行在任何 Java 代码中(简单的主类、小程序、Web 应用程序或 JavaEE 企业应用程序中)。Spring 几乎可以做到 EJB 可以做的所有事情,并且还可以做更多的事情,但我认为它最出名的是依赖注入和非侵入式事务管理。

    在线参考(非常好)
    书籍:我找不到一本关于 Spring 3.x 的好英文书,尽管有几本正在制作中。

  • Hibernate 是 Java 平台上第一个大型 ORM(对象关系映射器),因此极大地启发了 JPA(它是 EJB3 标准的一部分,但可以在没有 EJB 容器的情况下使用)。我建议针对 JPA 进行编码,并仅使用 hibernate 作为提供程序,这样您就可以轻松地切换到 EclipseLink 等。

    书籍:Pro JPA 2:掌握 Java™ 持久性 API(不是专门针对 hibernate 的),
    Java Persistence with Hibernate(有点过时)


9
明确表述,Spring只需要JVM,而EJB需要一个完整的应用服务器。 - boardtc
@boardtc Spring至少需要一个Servlet容器,对吧?据我所知,Spring使用嵌入式Tomcat实例。 - Utku
2
@Utku Spring MVC确实是一个MVC框架,但Spring不仅仅是一个MVC框架。 - Sean Patrick Floyd

7
  • JSF: 一个GUI框架 - 如果您只想实现后端,则不需要使用它
  • EJB: 分布式组件的标准,曾经非常复杂,但标准的第3个版本使用起来相当容易。这可能是您解决方案的一部分。
  • Hibernate: 对象关系映射框架。它作为Java持久性体系结构(JPA)标准的灵感来源,现在由Hibernate和EJBs都支持。
  • Spring: 应用程序框架,可以做各种事情,包括依赖注入、Web GUI和AOP。

然而,如果您想要进行REST,则对您最重要的标准是JAX-RS。您可以在Spring框架内或者与EJB一起使用它。对于持久性,您可以使用Hibernate,或者使用类似Glassfish的EJB容器的JPA实现。


5

EJB是企业Java Bean,请参见链接以了解其描述,但基本上它是编写企业应用程序的“默认”Java方法。

Hibernate是ORM框架;一种将应用程序中的对象/类映射到数据库表的方式。它与如何将数据持久化到数据库相关。

Spring是IoC /依赖注入容器,提供许多有用且经过良好测试的抽象,使您的生活更加轻松。Spring有点像自己的应用程序框架。

JSF是Java Server Faces,是用于Java Web应用程序的视图技术。

您可以使用EJB或Spring。如果您愿意,您可以在任何一个中使用Hibernate作为持久化实现;您不需要这样做。对于RESTful web服务,您不需要JSF。

人们非常喜欢Spring-我建议使用它...


2
  • JSF - Java Server Faces -> 网页用户界面
  • EJB - Enterprise Java Beans -> 组件,可以是有状态的(面向会话)或无状态的(服务),也可以是消息驱动的(异步)
  • Hibernate - 持久化服务,类似于其他JPA实现(Eclipselink、OpenJPA或Toplink)
  • Spring是另一个世界,没有EJB,它能够集成其他视图技术。它非常灵活。

你必须在JEE5/6和spring之间做出选择。要么选择红色药丸,要么选择蓝色药丸,不要同时使用两者。


2
很好的概述。但关于红色或蓝色药丸:Spring 与几乎任何其他技术都很好地集成在一起,包括 EJB http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/ejb.html - Sean Patrick Floyd

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接