1.1 Spring 之崛起 1 第1章 2 Spring框架的由来 3 4 本章内容 Spring之崛起 Spring框架概述 Spring大观园 J2EE作为一种企业级应用开发平台,其优异表现是我们有目共睹的。但纵使是最为强大的军队, 如果没有一个好的指挥官,不知道如何发挥这支军队的强大战斗力,那这支军队也不可能取得太多辉 煌的战果。在J2EE平台的一些早期实践中,就出现了对J2EE平台所提供的各项服务的滥用,将基于J2EE 平台的企业级开发带入了窘境。 Spring是于2003年兴起的一个轻量级的Java开发框架,由Rod Johnson在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来。它的最初目的主要是为了简化Java EE 的企业级应用开发,相对于过去EJB ① 时代重量级的企业应用开发而言,Spring框架的出现为曾经阴霾 的天空带来了灿烂的阳光。 1.1 Spring 之崛起 在中世纪的欧洲,当重装骑兵所向披靡时,哪国的军队中如果没有一支重装骑兵真的会让人笑话 的,按照电影《大腕》里的一句话说“你都不好意思跟人打招呼”。应该说,在当时的历史/军事环境 下,重装骑兵在军队中确实发挥了不可或缺的作用。有时候,一次关键时刻的重装骑兵冲锋就可以奠 定战局的胜利。但是,时过境迁,历史的车轮一直在向前缓缓行进,重装骑兵头上的光环也随之渐趋 黯淡,其缺点开始显露无遗。 重装骑兵代价高昂。一名重装骑兵的装备花费几乎能够武装一小队轻步兵,对于财力不够雄 厚的国家来说,维持一支常备的重装骑兵队伍绝非易事。实际上,对于财力雄厚的大国(相 当于IT界的IBM、微软)来说,为了减轻财政上的压力,通常也是将这部分花销尽量摊派给贵族。 兵种自身限制太多。沉重的盔甲以及一整套装备使得重装骑兵的机动性和灵活性大打折扣, 在正式投入战斗之前,重装骑兵需要很长时间的列装和部署,对于瞬息万变的战场形势来说, 某些情况下,这等同于自杀。 发挥作用的场景有限。纵使各翼军队能够掩护重装骑兵完成部署,但如果战场地形不适合重 装骑兵冲锋,那也就无法让他们大显身手,前期的准备或者战斗掩护就更是得不偿失。 当新的战术和兵种能够更加高效地完成作战任务时,依然主打重装骑兵的军队能取得什么样的战 ① 此后提到的EJB通常都是指1.x和2.x版本的EJB,因为EJB3现在已经受Spring框架的影响,也主打基于POJO的轻量 级应用解决方案了。 5 6 7 8 9 10 11 12 13 14 15 16 17 Spring 的 IoC 容器 2 果,轻骑兵的出现已经给了我们一个明确的答案。 当然,我的本意不在讲战争史,我只是想让大家看到,在早期的J2EE平台开发实践过程中,盲目 地推崇某一“兵种”,比如EJB,将会招致怎么样的一种命运。历史是相似的,不管是军事发展史,还 是我们的J2EE平台企业级应用开发史。君不见当年言必称EJB的盛况吗?这跟中世纪欧洲重装骑兵的显 赫是何等地相似。但任何技术或者事物都有其适用的场景,如果用在了不合适的场景下,我们就不得 不为滥用而付出相应的代价。EJB是使用J2EE平台各项服务的一种方式,但不是唯一的方式。对于分布 式系统来说,使用EJB在某些方面确实可以带给我们很大的收益,但并不是所有的J2EE应用都要用于分 布式环境。如果不分场景地滥用EJB,J2EE平台上的这支“重装骑兵”的局限性自然会暴露出来。 使用EJB,通常也就意味着需要引入拥有EJB Container的应用服务器(J2EE Application Server) 的支持,比如BEA的WebLogic或者IBM的WebSphere,而这往往也就意味着高昂的授权费用。 虽然开源的JBoss等应用服务器也提供对EJB Container的支持,但对于商业软件来说,出于产 品质量和售后服务等因素考虑,商业产品WebLogic或者WebSphere依然是最佳选择。这跟当年 欧洲崇尚重装骑兵相似,都免不了要付出高昂的代价。 说到重装骑兵列装和部署的复杂和迟缓,使用EJB开发的企业级应用也存在同样的问题。使用 EJB使得应用程序的部署和测试都更加困难,复杂的类加载机制、复杂的部署描述符、过长的 开发部署周期等,无疑都增加了开发EJB应用程序的难度。 重装骑兵需要合适的战机才能发挥其最大作用,EJB也是如此。只有在分布式的场景中,EJB 才会带给我们最大的益处。但是,当大家在崇拜EJB的狂热氛围之下,不分场景地滥用它时, 后果自然可想而知了。要么是开发过程缓慢,无法如期交付;要么就是程序交付后性能极差, 很难满足客户需求。 当然我们还可以列举更多,但这些已经可以说明问题了。应该说,基于EJB的应用开发实践并非一 无是处。尽管其本身在合适的场景下也或多或少地存在一些问题,但不分场景地滥用它,才会导致基于 EJB的应用开发声名狼藉。历史的车轮时刻都没有停下,当人们意识到大部分J2EE应用开发初期甚至整 个生命周期内都不需要牵扯到分布式架构时,J2EE平台上对应EJB而生的“轻骑兵”自然也该千呼万唤 始出来了——倡导轻量级应用解决方案的Spring,就承担了这一历史角色! Spring倡导一切从实际出发,以实用的态度来选择适合当前开发场景的解决方案。如果不需要用到 分布式架构,那就没有必要使用EJB之类的“牛刀”。而大多数的J2EE应用也确实不需要在开发初期或 者整个生命周期内引入任何分布式架构。这个时候,采用敏捷、轻量级的开发方案可以收到更好的效果。 Spring所倡导的J2EE轻量级应用解决方案顺应天时,自然得以快速崛起…… 注意 没有任何一种解决方案是普遍适用的,只有适用于特定场景的解决方案,脱离具体场 景来讨论任何解决方案都是脱离实际的表现。Spring并不是要替代EJB,而是给出EJB之外的 另一种方案而已,甚至于二者可以是互补的。如果某一场景下EJB依然是最为合适的解决方案, 那么我们可以毫不迟疑地使用它;同样地,对于Spring的使用也应该考虑到具体的应用场景, 这一点应该是需要我们始终牢记的。当古代的重装骑兵以坦克的形式重新跃上历史舞台时, Java平台上会不会也上演同样的一幕呢?我们拭目以待。 1.2 Spring 框架概述 大气层的包裹为地球创造了适合人类生存的环境。当地球上的资源足够满足人类生存需要时,我 1.2 Spring 框架概述 3 们没必要急于开展星际移民计划,那样造成的人力物力开销会很大。当年盲目倡导EJB架构,就好像 从一开始就不顾实际情况而开展星际移民计划,向其他星球移民当然是个好想法,但是否立即有必要 如此大动干戈呢?对于大多数的应用程序来说,EJB架构是没有必要的。我们只需要一个大气层包裹 的、环境适宜的地球即可。Spring框架所倡导的基于POJO(Plain Old Java Object,简单Java对象)的 轻量级开发理念,就是从实际出发,立足于最基础的POJO(就好像我们的地球)。为了能够让这些 基础的POJO构建出健壮而强大的应用,Spring框架就好像那包裹地球的大气层一样,为构筑应用的 POJO提供了各种服务,进而创造了一套适宜用POJO进行轻量级开发的环境。 从广义上讲,不管Spring框架自发布到现在经过了多少次的版本更迭(从1.x到2.0再到2.5),其本 质是始终不变的,都是为了提供各种服务,以帮助我们简化基于POJO的Java应用程序开发。Spring框 架为POJO提供的各种服务共同组成了Spring的生命之树,如图1-1所示。 2 3 4 5 DAO Spring JDBC 事务管理 ORM Hibernate iBATIS JPA Toplink JDO …… AOP Spring AOP AspectJ集成 6 JEE服务集成 JMX JMS JCA EJB Remoting JavaMail …… Web Spring MVC Spring Portlet MVC 其他Web框架集成 各种视图类型的集成 …… 7 8 9 Core IoC容器 Framework工具类 10 11 12 图1-1 Spring框架总体结构 组成整个Spring框架的各种服务实现被划分到了多个相互独立却又相互依赖的模块当中。正如我 们在图1-1中所见到的那样,这些模块组成了Spring生命之树的枝和干,说白了也就是它们组成了Spring 框架的核心骨架。抓住了这副骨架,也就抓住了Spring框架的学习主线。 整个Spring框架构建在Core核心模块之上,它是整个框架的基础。在该模块中,Spring为我们提供 了一个IoC容器(IoC Container)实现,用于帮助我们以依赖注入的方式管理对象之间的依赖关系。对 Spring的IoC容器的介绍将成为我们此次Spring之旅的第一站。除此之外,Core核心模块中还包括框架 内部使用的各种工具类(如果愿意,我们也可以在框架之外使用),比如Spring的基础IO工具类等, 这些基础工具类我们也会在合适的地方介绍。 13 14 15 16 17 Spring 的 IoC 容器 4 沿着Spring生命之树往上左序遍历,我们将来到AOP模块。该模块提供了一个轻便但功能强大的 AOP框架,让我们可以以AOP的形式增强各POJO的能力,进而补足OOP/OOSD之缺憾。Spring的AOP 框架符合AOP Alliance规范,采用Proxy模式构建,与IoC容器相结合,可以充分显示出Spring AOP的 强大威力。我们将在了解了Spring的IoC容器的基础上,详细讲述Spring AOP这一部分。 继续上行,Spring框架在Core核心模块和AOP模块的基础上,为我们提供了完备的数据访问和事 务管理的抽象和集成服务。在数据访问支持方面,Spring对JDBC API的最佳实践极大地简化了该API 的使用。除此之外,Spring框架为各种当前业界流行的ORM产品,比如Hibernate、iBATIS、Toplink、 JPA等提供了形式统一的集成支持。Spring框架中的事务管理抽象层是Spring AOP的最佳实践,它直接 构建在Spring AOP的基础之上,为我们提供了编程式事务管理和声明式事务管理的完备支持。这些服 务极大地简化了日常应用开发过程中的数据访问和事务管理工作。在学习完这两部分内容之后,相信 读者将会有切身的体会。 为了简化各种Java EE服务(像JNDI、JMS以及JavaMail等)的使用,Spring框架为我们提供了针 对这些Java EE服务的集成服务。在
Spring揭秘 王福强
计算机 >
Java >
java >
文档预览
673 页
0 下载
339 浏览
0 评论
0 收藏
3.0分
温馨提示:如果当前文档出现乱码或未能正常浏览,请先下载原文档进行浏览。
本文档由 user 于 2024-03-26 12:47:00上传分享