Java EE 5.0能取代Struts,Spring和Hibernate吗?

阅读更多
Java EE 5.0能取代Struts,Spring和Hibernate吗?
 
作者 : Allen 文章来源 : www.operamasks.org

         2006 5 月, Java EE 5 规范正式发布。 Java EE 5 的出现,可能是 J2EE 诞生以来比较重量级的一次震撼 ,规范发布至今已有半年之多,业界对 Java EE 5 的关注也变得越来越热烈, google 一下“ java ee ”关键字,可以得到 500 多万条相关纪录,而从 Sun 网站上进行检索( http://java.sun.com/javaee/overview/compatibility.jsp ),也可以看到专业厂商已经迅速跟进,除 Sun 公司本身外,包括全球闻名的 SAP 、金蝶 Apusic 等另三家,已经推出全面支持 Java EE 5 规范的应用服务器产品。

 

 

Java EE 5 包含 JSF 1.2 EJB 3.0 JAX-WS 2.0 等新功能,试图解决 Java 企业级应用开发的简便性、灵活性及易用性问题。在 Java EE 5 出现之前,很多开源框架( Open Source Framework )如雨后春笋般涌现,尝试从某种角度或某些方面去解决“委员会”规范所未能顾及的应用开发问题,如 Web 开发中的关注分离问题( MVC )、业务模型实现问题( ORM )等等。很多开源 framework 都非常出名,为人们喜爱并广泛使用,如 Struts Spring Hibernate 等,这些“江湖派”作品曾经一定程度上成为 Java 企业级应用开发事实上的标准。 Java EE 5 的出现,是否会改变这种状况?或者说,人们在重新选择应用框架时,是否会优先考虑全新的 Java EE 5 技术?带着这种疑问,笔者试图进行简单的技术比较,并辅于肤浅的评论,希望能够抛砖引玉、借花献佛,以娱大众。

 

Struts vs. JSF

 

 

Struts

JSF

MVC

支持

支持

POJO

 

支持

页面流( Page Flow

支持

支持

UI 组件( UI Component

 

支持

 

MVC 是模型( Model )、视图( View )、控制( Controller )分层的结构,通过分层来实现关注分离,减少传统开发中常见并重复的工作。 Struts JSF 均支持 MVC Struts MVC 支持的核心是 Controller ,通过 Controller (一个共同的入口 Servlet )获得 HTTP 请求,将 HTTP 参数传入 ActionForm ,然后将 ActionForm 传给 Action Struts HTTP 请求只有一个事件处理 handler ,当请求过来时,由相应 Action 返回结果给前端 Controller ,并据此选择如何进行导航。 JSF 一般也采用一个前端 Controller (有些商用 JSF 能够智能识别 JSF 请求,无需额外的 controller ),不过在 Controller 中做的工作跟 Struts Controller 截然不同,它负责触发 JSF 页面组件中的事件,用 Render 工具生成组件的展现,绑定来自 Model 的数据到组件等。可以看到, JSF 在在控制层更灵活,在视图层支持 Render 工具的变换而生成灵活的展现,在模型层实现与框架的彻底分离,因而具有更高的灵活性。

 

 

POJO 是无格式 Java 对象( Plain Old Java Object )。 POJO AOP 结合被广泛用于快速业务模型。 Struts 设计的初衷主要是解决视图和控制问题,并无过多关注模型的灵活性问题。 Struts 中的 ActionForm 模型必须继承自框架类,虽然可以通过定制类库提供一些帮助类实现模型与框架无关,但本质上还是紧耦合于 JSP- and HTTP-centric 方法 JSF 提供了对 POJO 天然的良好支持,并支持通过 RAD 工具实现快速的业务模型生成,从而具有更高的生产力。

 

页面导航的最大意义是帮助实现页面的可视化开发,在 UI 界面上快速定义页面流向。页面导航分静态导航和动态导航两种,静态导航是页面直接流向另一页面,动态导航是由特定动作或逻辑决定页面的流向。 Struts JSF 均支持静态和动态页面导航。不过 Struts 中的导航规则是绑定到 Action 中的,那意味着可能需要对同一页面中不同的 Action 做重复性的导航规则制定,而 JSF 导航可以跟 Action 无关,可以在页面中不同组件的不同 Action 间共享相同的导航规则。

 

Struts 本身并不提供 UI 组件机制,而 JSF 则提供了完整的 UI 组件机制。通过 UI 组件的定制和重用,能够极大地简化开发,提升用户体验。商业化的产品则往往更进一步,提供强大易用的开发工具,实现 drag-and-drop 方式所见即所得的 Web UI 开发。

 

Spring vs. EJB 3.0

 

 

 

Spring

EJB3

标准( Standard

 

是, Java EE 5 标准组成部分

持久( Persistence

JDBC, Hibernate, JDO, iBatis and JPA ongoing spring 2.0

JPA

声明式服务( Declarative Services

支持

支持

依赖注入( Dependency Injection

支持

支持

集群( Cluster

 

支持

 

Spring 框架是一个开源项目,并不是一个标准的东西。 Spring 自己定义了一套 XML 配置文件大纲以及程序接口,从长远考虑,有很大的不确定性。 Spring 的主要开发者来自 Interface21 公司(这是帮我非常敬重的人), Interface21 靠相关咨询和服务维持,作为一个商业团体其利益取向将可以完全左右 Spring 未来的方向。相比 EJB 3 出身名门正派的标准血统并有众多主流商业厂商支持, Spring 的非标准性将可能带来极大的风险。

 

Spring 框架本身不带持久实现,但它支持 JDBC, Hibernate, JDO iBatis 等持久化框架。 Spring 通过使用不同的 DAO Helper 类以利用 JDBC Hibernate iBatis JDO ,所以并没有实现和最终服务提供者的隔离。简单来说,就是需要重构代码才能实现持久化框架的更换。 EJB 3.0 的持久集成在应用服务中,通过 JPA ,可以在底层更换持久实现,如将 Hibernate 更换为 Toplink EJB 3.0 的持久具有更大的灵活性,并有利于厂商进行性能优化和扩展。

 

Spring EJB3.0 都为企业应用提供运行时服务,(如:事务、安全、日志消息、配置服务)。由于这些服务都不是直接与应用的业务逻辑相关联,所以都不是由应用来自行管理。 EJB3.0 使用 Java 注释来配置声明式服务, Spring 使用 XML 配置文件。在大多数情况下, EJB3.0 的注释声明显得更为简单和优雅。 Spring 使用 XML 来定义属性并配置声明式服务的结果将是一个冗长而不稳定的配置文件。

 

依赖注入模式( DI )是在应用中实现松散耦合的最佳实践。 Spring EJB3.0 都支持 DI 模式,但他们有着深刻的不同。 Spring 支持通用的(但复杂的)基于 XML 配置文件的依赖注入 API EJB3.0 支持注入大多数服务对象(如 EJB 和上下文对象)和通过简单注释声明的 JNDI 对象。

 

EJB 3.0 完全支持集群。部署在服务集群中的 EJB3.0 应用将自动获得负载均衡、分布缓存、状态复制等功能。底层的集群服务隐藏在 EJB3.0 编程接口后面,屏蔽了所有的复杂性。 Spring 没有简单的利用集群的方法。

 

Hibernate vs. EJB 3.0

 

 

Hibernate EJB 3.0 其实并没有很好的可比性,因 Hibernate 仅关注 ORM ,而     EJB 3.0 更多则更多表现为一种组件框架,其中包含 ORM 部分而已。 EJB 3.0 在设计过程中,曾经得益于 Hibernate 的作者 Gavin King ,据说 EJB 3.0 EntityBean 的设计理念完全来自于 Hibernate 。只需用将 EJB 3.0 EntityBean API

  • 我们为什么需要Java EE 5.0?
    2007-01-06 10:33 486
                     ...
  • RIA
    2007-01-19 11:39 494
    RIA技术概览 互� ...
  • java P2P
    2007-01-22 19:44 872
    英文原文地址:http://www ...
  • SOA的发展历史与标准规范
    2007-02-25 09:31 465
    作者:长风     来源:IT ...
  • 单点登陆(Single Sign-On,SSO)
    2007-03-08 16:14 456
    1 ...
  • 化解.NET与J2EE争端
    2007-03-15 18:38 350
    作者:Liusf     来源:bui ...
  • BEA WebLogic JRockit的使用和性能调优
    2007-05-09 09:10 430
    一.JRockit调优简介 JRockit是一个自适应的JVM ...
  • 2007互联网发展预测
    2007-05-22 10:56 395
    2007互联网发展� ...
  • WebLogic Server 性能调优
    2007-06-08 15:05 469
    时间:2003-09-22作者:Arunabh Hazarik ...
  • 用户搜索行为与关键词分析
    2007-06-22 13:53 496
    来自: http://www.chinasearchw ...
  • 敏捷的核心:消除浪费,走向精益(转载)
    2007-07-04 18:34 411
    作者 Jeff Xiong 发布于 200 ...
  • JAVA邮件群发
    2007-07-23 09:26 634
    摘  要:邮件群发 ...
  • Java SE 6 新特性: JMX 与系统管理
    2007-07-25 12:25 426
    2006 年底,Sun 公司发布了 Java Standard ...
  • 2007年中国程序员大调查活动成功落下帷幕(CSDN)
    2007-08-26 14:52 416
    【CSDN ...
  • 十大已亡或正在灭亡的电脑技术,C入选
    2007-10-15 18:24 491
    【CSDN 消息】来自Computerworld  很难说这些 ...
  • SOA框架的六个不完美之处
    2007-10-18 10:43 429
    来源:IT专家网   作� ...
  • .NET和J2EE该相互学习什么?
    2007-11-22 08:47 590
    2007-11-19 来自:conanpaul  ...
  • JBoss,Geronimo还是Tomcat?
    2008-01-08 16:45 519
    JBoss,Geronimo还是Tomcat? ——三种开源J ...
  • Java是否应该停止增加新特性
    2008-01-30 09:12 422
    争论:Java是否应该停止 ...
  • 集成Java内容仓库和Spring
    2008-02-19 18:12 676
    作者 Costin Leau译者 胡键 发布于 2008年2月 ...
Global site tag (gtag.js) - Google Analytics

你可能感兴趣的:(Spring,Java,Struts,Hibernate,JSF)