Java EE对比Spring:两者并非完全等效

日期: 2013-03-21 作者:Ken Rimple翻译:谨萱 来源:TechTarget中国 英文

Java EE是一个功能强大的平台,在过去几年中已经被简化和优化,可以说Java EE可以做任何事,那么Spring框架确实可能是一个重大的错报。前面的我们讲了Spring的流行度,现在让我们看看Java EE和Spring的比较,确认一些Java EE能做的事情,并且看看Spring如何在旁使用,或者替代他们中的一些API使得开发更完美。

  JDBC 4.1和Spring的JdbcTemplate

  Java数据库连接(JDBC)API,它早在1999年,我第一次授课的时候,就已经作为Sun JDK1.0.2课程的辅助材料了,它已经是很多框架的支柱,包括Hibernate和JPA服务规范,MyBatis iBATIS 以及其他很多框架。

  编写原始的JDBC查询API的时候有两个期望:

  第一是开发人员必须获得一个连接,创建一个语句,然后处理一个结果集。第二是开发人员必须妥善关闭这些连接,并且处理各种异常,以避免出现资源泄漏。

  这里有一个典型(Java 7以前)JDBC代码块:

Connection conn = null; 
Statement statement = null; 
ResultSet rs = null; 
  
try { 
   conn = //let’s assume we ask a connection pool for the connection 
               让我们假设为这个连接请求一个连接池
   statement = conn.prepareStatement(“select a, b from foo f where f.c = ?”); 
   statement.setInt(1, 234); 
   rs = statement.executeQuery(); 
   while (rs.next()) { 
      // process each row(循环处理每一行) 
   } 
} catch (SqlExceptoin se) { 
   se.printStackTrace(); 
} finally { 
   try { 
  // this isn’t quite right- you should close each one in a try/catch for safety
     这样做不是特别正确,应该在每一个try/catch中安全的关闭 
      rs.close(); 
      stmt.close(); 
      conn.close(); 
   } catch (Exception e) { … ? }
  上面的

  代码存在如下一些主要的问题:

  开发人员必须正确处理异常。finally块很难写好。开发人员必须处理一个受控异常(SqlException),并它作为一个运行时异常重新抛出,或把它扔给堆栈(ick)。

  这是许多样板的代码。说了这么多,事实上,我们遗漏了while循环调用每一行,取而代之的是一个整理过的评论。

  Spring的方式

  Spring团队创建的第一个API是JdbcTemplate API。基于模板方法的设计模式,一个方法同时为流程提供setup和teardown代码,并且提供了一种方法,从而在安全的代码块中插入逻辑来处理流程,这个API简化了几件事情:

  开发人员不再需要try / catch异常来处理错误。错误作为运行时异常被扔到堆栈,而不是受控异常。资源在业务逻辑以外分配,所以不可能再出现连接泄漏事件。任何重复使用的代码将调用模板方法本身。

  JdbcTemplate中相同的代码可能需要几种形式。

  这是最简单的形式:

JdbcTemplate template = new JdbcTemplate(connection); 
List<MYABC> template.query(“select a, b from foo f where f.c = ?”, 234, 
              new RowMapper { 
                    public MyAbc mapRow(ResultSet rs, int rowNum)  
                          throws SQLexception { 
                          return new MyAbc(rs.getString(1), rs.getString(2)); 
                    } 
              } 
}

  JdbcTemplate的查询方法提供了一个称为RowMapper的API,实现这个接口可以处理每一行。开启和关闭连接,创建和准备语句,甚至是创建并返回一个列表的技术性细节都是由查询方法来处理的。

  我们甚至有空间显示完整的方法,但是我们没有那么多teardown代码。

  本文只是Spring学习的第一部分,精彩内容还将继续,敬请关注。

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

相关推荐

  • Spring针对Java 8升级

    Java 8刚刚在几周前发布。后来Spring Framework项目负责人发表了题为《企业项目中的Java 8》的文章。文中,指出那些著名的Java EE应用服务器如何不允许轻松升级。

  • 你应该远离的六个Java特性

    近日,Tarnovski撰文谈到了普通开发者应该尽量避免使用的6个Java特性,这些特性常见于各种框架或库当中,使用这些特性也许会给你所开发的应用带来灾难。

  • 从测试数据来看Node.js和Java EE的性能区别

    本文是通过从CouchDB上读取JSON数据来比较Node.js和Java EE之间的性能的。究竟谁的性能更好些?

  • Spring 烂!差!

    有些人可能对Spring的第一印象不太好,它真的很烂,很差吗,也许这只是你的一种偏见,它也有是自己的优点的。