Java web开发教程部分 (2)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
对于我这样一个爱书、爱开源及爱Spring的人来说,每一次读市面上关于Spring的图书,都会让我对Spring有新的认识及体验,因为每一个作者都会用他所认识的方式来告诉我们什么是Spring、怎么用Spring。
由所选择的点不同,角度的不540C,因此读多了就知道Spring真正是什么。
2007年,我跟ErikChang、船长、stef等曾经打算合作写一本能“深入Spring 2”的书籍,然而由于工作的原因,却没能坚持到最后,遗憾的同时,也让我深深体会到了写作的艰辛。
2008年春节刚过,ErikChang突然告诉我,他已写完了一本关于Spring 2的书籍。
给我发了《精通Spring 2.x Java Web开发》的几章,我一口气读完,感到非常欣慰与惊叹。
欣慰的是我读到了一本真正“Spring 2”的书,惊叹的是ErikChang在几个月的时间里奇迹般地写出这么多的东西。
不管您是Spring的新手还是老手,我相信你从这本书中一定能读到以前所不了解的Spring,在应用好Spring的同时,了解他的设计原理,了解他里面的设计精华及编码艺术,这将会为您增加不少的财富。
只是能简单地应用Spring,这没意义;反复不断地深入学习Spring的源码,并把收获及心得拿出来与大家分享,这有意义。
因此,ErikChang做了一件非常有意义的事。
用心能做好一件事,执着能让我们取得成功。
祝愿每一位读者朋友工作顺利,事业成功!
EasyJF 创始人 技术总监 蔡世友,
第1章 开始Spring之旅
自从Spring问世以来就引起了J2EE业界的关注,J2EE开发原本就是一个很复杂的领域,很多初级程序员都不敢涉足,Spring改变了这个局面,Spring出现以后迅速使J2EE开发越来越简单,某种程度上促进了软件生产力的发展,Spring已经成为众多程序员都日益青睐的开发框架,本章将带领大家开始学习Spring,主要内容如下。
●Spring源码的获取
●源码内容说明
●第一个Spring实例
1.1 获取并查看Spring
在使用Spring之前首先要获取该框架的jar包,同时Spring是一个开源项目,有兴趣的读者可以查看Spring源码,了解Spring的设计思想及源码的编写,本节带领读者一步步来获取并查看Spring源码,使读者学会独立获取Spring并在Eclipse IDE中查看Spring源码,对Spring有个概念的认识。
1.1.1 获取Spring
首先到官方网站下载Spring, Spring的官方网址是/,单击download栏目,进入下载页面,如图1-1所示。
图1-1 Spring官方下载界面
然后单击需要下载的Spring版本,笔者推荐尽量选择最新的版本,如当前的SpringFramework 2.0.7(到本书撰写完毕Spring最新版本已经涉及到2.5),可进入www.source 中下载Spring的源代码,如图1-2所示。
图1-2 sourceForge下载主界面
备注:SourceForge是全球最大的开放源代码软件开发平台和仓库。
它集成了很多开放源代码应用程序,为软件开发提供了整套生命周期服务。
是开放源代码软件的开发者进行开发管理的集中式场所,也是源代码仓库。
通过单击SourceForge中Spring项目相应的链接,即下载Spring 2.0的整个项目源码,如图1-3所示。
图1-3 sourceForge下载界面
1.1.2 Spring项目文件简介
下载完成后,得到一个类似Spring-framework-2..0.7.zip的压缩包,然后解压该压缩文件,即可见到Spring的项目文件,如图1-4所示。
图1-4 Spring项目文件列表
1.根目录
在根目录上,主要是Spring开源项目的ant脚本文件build.xml, maven脚本maven.xml等,可以在命令行输入ant tests来运行Spring的所有测试代码,另外,还可以使用ant build及ant alljars实现在本机上根据自己的jdk重新编译Spring,并生成相关的jar包等。
在根目录上,还有Spring的发布协议说明license.txt、项目说明readme.txt、变更日志changelog.txt和注意事项notice.txt等。
2.dist目录
在Spring项目的文件中,dist是已经编译打包好的发布jar, dist 中的文件结构如图1-5所示。
图1-5 Spring项目中dist目录文件列表
其中spring-src.zip是Spring源码的压缩包,spring.jar是经过编译后的打包文件,spring-mock.jar是spring提供用于单元测试中模仿对象的相关类,spring-aspects.jar是spring与aspectj集成的jar 包。
resources目录是Spring项目的相关资源文件,如配置文件描述符spring-beans.dtd等。
dist中的modules目录是spring各组成部分发布jar包,因为Spring的各组成部分是完全独立的,用户可以在只选择使用Spring中的一部分功能,而不是全部的时候,直接使用相关部分jar即可,比如,只用spring mvc选择spring-webmvc.jar,要用Spring中的jdbc封装可以直接选择spring-jdbc.jar, modules中的内容如图1-6所示。
图1-6 Spring项目的modules目录列表
3.docs目录
docs目录是Spring项目的文档目录,里面主要包括Spring项目使用说明文档及系统API等,在Spring 2.0的项目中,包括api文档,spring mvc应用简单示例、spring参考手册和spring标签库简介等几个部分,如图1-7所示。
图1-7 spring项目docs目录列表
4.mock目录
mock目录是Spring用于单元测试中模仿对象的mock实现源代码,也就是spring-mock.jar中的源码。
5.Aspectj目录
Aspectj目录是Spring与Aspectj集成的源代码及应用测试代码。
6.Src目录
Src目录是Spring项目的全部源代码。
7.Samples目录
Samples目录是Spring项目的应用程序示例源代码,主要包括一个简单的网上商店jpetstore,一个宠物医院petclinic。
另外,还简单演示一些特殊功能的countries和imagedb等。
通过这些示例程序代码,可以快速地学习到Spring的使用方法。
8.Test目录
Test目录是Spring项目的单元测试代码,Spring作为测试驱动开发的推崇者,有着非常详细的单元测试用例,通过单元测试代码,可以快速地掌握Spring各个类的方法。
9.tiger目录
tiger是Spring项目中使用java tiger版中的新功能及特性的源代码,包括注解等。
10.Lib目录
Lib目录中包括了Spring项目用到的所有jar文件,Spring的很多功能都是在一些现存的项目上搭建起来的,另外,Spring集成了很多优秀的开源项目。
因此,要使用这些特性,必须在项目中引入相关的jar。
在Spring的lib目录中,这些jar文件分门别类地存放于lib的子目录中,如图1-8所示。
图1-8 Spring项目lib目录列表
1.1.3 查看Spring源码
由于Spring的功能相当强大,其源代码的数据及源代码的层次结构等都相当复杂,因此需要借助专业的Java开发工具来查看Spring的项目源码。
Spring 2.0的源代码需要在Jdk 1.5以上的版本中才能全部正常编译。
下面演示在Eclipse中如何打开Spring的源代码。
(1)在Eclipse中新建一个工程,在“新建工程”对话框中,选择“create project from existing source”,然后通过“浏览文件夹”对话框选择Spring项目的解压目录,如图1-9所示。
图1-9 查看Spring源码步骤1
(2)选择好Spring项目的目录后,单击【Next】按钮,Eclipse 会加载Spring项目文件,进入项目的setting配置对话框。
在该对话框
中主要检查Source(源代码目录)及Libraries(相关jar包)两个部分,分别如图1-10和图1-11所示。
图1-10 查看Spring源码步骤2(Spring项目的源码路径)
图1-11 查看Spring源码步骤3(Spring项目所需要的jar库文件)
(3)单击【Finish】按钮,完成项目的建立,这里即可通过Eclipse的package explorer视图面板查看Spring项目的源代码,如图1-12所示。
图1-12 查看Spring源码步骤4
1.2 开始使用Spring
可以直接利用Spring的相关jar包,开始使用Spring。
下面演示使用Eclipse开发一个简单的Spring示例的程序。
(1)使用Eclipse的new project向导,新建一个名为spring-hello的工程,如图1-13所示。
图1-13 建立一个Java工程
(2)新建一个名为Hello的类,Package设置为spring.chapter1,如图1-14所示。
图1-14 新建一个类
(3)把所需要使用的Spring项目的jar文件加入到当前工程的Libraries中,本例中只使用Spring中简单的IOC功能,只需要spring-beans.jar、spring-core.jar及commons-logging.jar 3个包即可。
用鼠标右键单击工程名称,查看工程属性,选择工程属性中的Java Builder Path,然后选择Libraries选项,通过单击【add external jar】按钮把外部的jar文件添加到工程项目中,如图1-15所示。
图1-15 添加相关jar到classpath中
(4)输入Hello.java的完整源代码,其中Hello这个类有一个msg 属性,有一个setMsg方法用于设置msg属性的值。
另外,直接在Hello 的main方法中使用Spring的Bean工厂来从配置文件中加载一个名为helloBean,类型为package spring.chapter1.Hello的Bean。
然后调用这个Bean的sayHello方法。
全部源代码如下所示:
(5)在与Hello.java同级的目录下,建一个名为bean.xml的Spring配置文件,在这个Bean配置文件中定义helloBean,并通过依赖注入设置helloBean的msg属性值,其内容如下:
完成后的工程项目如图1-16所示。
图1-16 第一个类建立完毕后的项目图
(6)运行程序,在Hello.java上单击鼠标,选择Run As下面的Java Application,即可运行这个使用Spring的程序,该程序将输入helloBean中的msg值:“这是最简单的Spring示例!”,运行结果如下。
这是最简单的Spring示例!
到这里为止,就完成了一个最简单的Spring应用实践。
该例子使用了Spring的IOC功能。
具体来说,就是通过一个资源文件(Resource)res,创建一个Bean工厂实例factory,然后再通过factory来查找程序中需要使用的Bean。
再使用具体的Bean完成相应的工作。
当然,该示例说明不了多少问题,没有展示出Spring的特长,通过后面章节的学习大家会发现Spring究竟为什么这么备受青睐。
1.3 小结
本章详细地介绍了Spring的下载、Spring源文件中所属各个目录源码内容,并以一个简单的实例演示了Spring的使用方法,通过本章的学习,读者可以对Spring有一个简单的认识,能够独立下载Spring 并且初步认识Spring的IOC功能,下一章将详细讲解Spring IOC。
第2章 控制反转(IOC)和依赖
注入(DI)
近年来,在Java社区中风起轻量级容器的热潮,“让j2ee开发变得简单”,几乎每隔几个月就会有新的轻量级容器出现,这些轻量级容器都能较好地帮助开发者快速地将不同的组件组成一个应用程序,在这些轻量级容器的背后都有一个共同的装配模式,那就是“反向控制”,也就是IOC,英文全称是Inversion of Control,作为一位敏捷软件开发方法的早期开拓,Martin Fowler深入探索了IOC的工作原理,提出了“依赖注入”的新概念,也就是Dependency Injection。
本章针对SpringIOC进行深入地讲解,主要内容如下。
●SpringIOC详细配置
●SpringIOC的使用方法
●ApplicationContext
2.1 认识IOC
当一个角色(调用者)需要另外一个角色(被调用者)协助工作时,在传统的程序设计过程中,通常由调用者来创建被调用者的实例。
但在Spring里,创建被调用者的工作不再由调用者来完成,因此称为控制反转(反向控制),创建被调用者实例的工作通常由Spring 容器来完成,然后注入调用者,这就是Spring的IOC。
2.1.1 开始第一个实例:超级玛丽之人
物构造
我们都玩过超级玛丽的游戏,本书就以设计该游戏作为实例讲解,使用Spring的相关技术来构建游戏。
超级玛丽游戏首先是需要游戏人物,名称可以是玛丽,也可以是其他的名称,这样我们就将任务抽象成一个接口,所有角色都统一实现该接口,也就是说,所有人物的属性都一样,但是属性值不一样。
其代码如下:
可以看到这里使用到了一个物品类Goods,由于物品也是多种的,这里也将其抽象成一个接口,这里的物品很简单,只有名称和增加人物的生命值量。
代码如下:
上面的两个类都使用了接口,目的就是为了便于扩展,这就是常说的面向接口编程,同时也希望程序员都养成这个习惯,在程序设计。