轻量级开发成功秘诀:露出水面的Spring
优势
同我一样,自行车世界冠军 Lance Armstrong 也来自德克萨斯首府奥斯汀。我很多年来,都很喜欢欣赏他的比赛,部分原因在于他从每次登车中得到的优势比世界上任何人得到的都要多。我寻找机会,以从我所做的每件事中得到附加的优势。Spring 通过提供胶水代码,消除麻烦重复的资源管理、配置和应用程序中的繁重工作,使我得到更多的优势。
采用持久性。Hibernate 是一套漂亮的持久性替换方案。但像所有持久性框架一样,它强制您管理一些低级的细节(我宁愿不要它们)。清单 4 展示了一个没有 Spring 的 Hibernate 应用程序示例。
清单 4. 没有 Spring 的 Hibernate
// Configuration code
Configuration config = new Configuration( );
config.addClass(Bike.class).addClass(Customer.class).
addClass(Reservation.class);
SessionFactory mySessionFactory = Configuration.buildSessionFactory( );
public List getBikesOldWay( ) throws Exception {
List bikes = null;
Session s = null;
try {
s = mySessionFactory.openSession( );
bikes = s.find("from Bike");
}catch (Exception ex) {
//handle exception gracefully
}finally {
s.close( );
}
return bikes;
}
清单 5 展示了一个类似的示例,但它使用了 Spring。
清单 5. 使用 Spring 的 Hibernate
public List getBikes( ) {
return getHibernateTemplate( ).find("from Bike");
}
可以将 Hibernate 模板看作是实现会话处理的方法。尤其要注意您所没有看到的。您不必担心事务,因为 Spring 让您通过声明配置它们。您也不必担心管理资源,因为代码是在模板中。Spring 总是会关闭会话,所以您不必担心。您不必在这个级别上处理异常,因为 Spring 将它们转换为一套通用的未检查异常(unchecked exceptions)。我喜欢未检查异常,因为我可以选择在架构的合适级别上抛出它们。只需提供很少信息来告诉 Hibernate 做什么。Spring 处理剩下的事情。这就是优势。
Spring 也通过其他途径建立了优势。通过为其他服务提供同种的胶水代码,Spring 减轻了应用程序编程人员的负担。我几乎再也不必像往常一样重复劳动。我可以更加简单地使用远程控制、事务、安全、持久性和 MVC 代码,因为 Spring 确实做到了“减负”。
在这里,我想指出一些不利之处。在我决定使用 Spring 的胶水代码替代自己的胶水代码时,我自己构建了 Spring 框架的依赖关系。通常,我认为付出这种代价非常值得。
AOP
在本系列的第 2 部分,我们了解到 AOP 可以将服务与 POJO 相关联以提供更佳的透明性。使用 AOP,可以从代码中消除许多横切关注点。所以,为什么不马上下载 AOP 框架并直接使用它呢?
事实上,一些团队就是这么做的。根据我的经验,技术在我们学会使用它之前就已经早早准备好了。当我看到中级和初级程序员使用 AOP 时,我联想到一个拥有强大工具的孩子。正视它:我们当中的绝大多数人在遇到 AOP 时,仍然还像个孩子。因为它使用了面向对象编程,所以我们必须花费一些时间积累相关知识以更有效地使用 AOP。
通过 Spring 的辅助训练,我能够使用 AOP。我可以使用一些预打包的方面并观察定义好场景的示例,这样我不需要冒任何风险就可以从 AOP 中收获更多。实际上,在过去可以经常看到类似的策略。Ada 编程语言支持封装,但只有受限的继承性。像 Microsoft® Windows®编程模型一样的早期窗口环境内部具有 Window 对象、类似 Smalltalk 消息的事件甚至还有继承,但是公开了一个过程编程模型。我认为这种策略对 AOP 是同等重要的。
Spring 的重大意义
对于那些使用 Spring 的人,Spring 无疑是革命性的。它的一些简单思想引发了影响深远的结果:
·Spring 有力地开拓了企业级服务容器。使您不再“隶属”于容器提供的 API 或服务。可以使用 Spring 上下文管理预打包的服务,整合第三方服务或自己编写服务。
·Spring 在可测试性方面有了长足的进步。通过 Spring,能够使用依赖注入将模拟对象插入到难以接触的位置,在容器外运行对象(因为这些对象是 POJO),甚至使用容器提供不可预知的数据。
·Spring 的胶水代码使得只要编写很少的代码就可以轻松插入企业服务。编写的代码越少,维护和扩展代码时工作量就越少。
·Spring 代表一个开放源码项目,重新定义了 Java 商业小组开发软件的方式。Spring 对于最新 EJB 规范的影响是不容置疑的,同时也是非常重要的。
·Spring 已经成为企业轻量级开发的顶梁柱之一。以下的参考资料为您展示如何入门和深入 Spring。在本系列的下一篇文章中,我会为您介绍轻量级开发中的一些替代的持久性方案。
祝您所喜爱的开放源码“小径”也被大家所发现。
关于作者
Bruce Tate 居住在德克萨斯州的首府奥斯汀,他是一位父亲,同时也是山地车手和皮艇手。他是 3 本最畅销 Java 书籍的作者,其中包括荣获 Jolt 大奖的 Better, Faster, Lighter Java 一书,最近又出版了 Spring: A Developer's Notebook 一书。他在 IBM 工作了 13 年,现在是 J2Life、LLC 的创始人兼顾问。他潜心研究基于 Java 和 Ruby 的轻量级开发策略和架构。
0
相关文章