前言
源代码的重要性
Java开发人员都知道,阅读源码是一个非常好的学习方式,在我们日常工作中或多或少都会接触一些开源代码,比如说最常用的Struts、Hibernate、Spring,这些源码的普及与应用程度远远超过我们的想象,正因为很多人使用,也在推动着源码不断地去完善。这些优秀的源码中有着多年积淀下来的精华,这些精华是非常值得我们学习的,不管我们当前是什么水平,通过反复阅读源码能力能有所提升,小到对源码所提供的功能上的使用更加熟练,大到使我们的程序设计更加完美优秀。但是,纵观我们身边的人,能够做到通读源码的真的是少之又少,究其原因不外乎以下几点。
● 阅读源码绝对算得上是一件费时费力的工作,需要读者耗费大量的时间去完成。而作为开发人员,毕竟精力有限,实在没办法拿出太多的时间放在源码的阅读上。
● 源码的复杂性。任何一款源码经历了多年的发展与提炼,其复杂程度可想而知。当我们阅读源码的时候,大家都知道需要通过工具来跟踪代码的运行,进而去分析程序。但是,当代码过于复杂,环环相扣绕来绕去的时候,跟进了几十个甚至几百个函数后,这时我们已经不知道自己所处的位置了,不得不再重来,但是一次又一次的,最终发现自己根本无法驾驭它,不得不放弃。
● 有些源码发展多年,会遇到各种各样的问题,并对问题进行了解决,而这些问题有的对于我们来说甚至可以用莫名其妙来修饰,有时候根本想不出会在什么情况下会发生。我们选择各种查阅资料,查询无果,失去耐心,最终放弃。
无论基于什么样的原因,放弃阅读源码始终不是一个明智的选择,因为你失去了一个跟大师学习的机会。而且,当你读过几个源码之后你会发现,他们的思想以及实现方式是相通的。这就是开源的好处。随着各种开源软件的发展,各家都会融合别家优秀之处来不断完善自己,这样,到最后的结果就是所有的开源软件从设计上或者实现上都会变得越来越相似,也就是说当你读完某个优秀源码后再去读另一个源代码,速度会有很大提升。
以我为例,Spring是我阅读的第一个源码,几乎耗尽了我将近半年的时间,其中各种煎熬可想而知,但是当我读完Spring再去读MyBatis只用了两周时间。当然,暂且不论它们的复杂程度不同,至少我阅读的时候发现有很多相通的东西。当你第一次阅读的时候,你的重点一定是在源码的理解上,但是,当你读完第一个源码再去读下一个的时候,你自然而然地会带着批判或者说挑剔的眼光去阅读:为什么这个功能在我之前看的源码中是那样实现的,而在这里会是这样实现的?这其中的道理在哪里,哪种实现方式更优秀呢?而通过这样的对比及探索,你会发现,自己的进步快得难以想象。
我们已经有些纠结了,既然阅读源码有那么多的好处,但是很多同学却因为时间或者能力的问题而不得不放弃,岂不是太可惜?为了解决这个问题,我撰写了本书,总结了自己的研究心得和实际项目经验,希望能对正在Spring道路上摸索的同仁们提供一些帮助。
本书特点
本书完全从开发者的角度去剖析源码,每一章都会提供具有代表性的实例,并以此为基础进行功能实现的分析,而不是采取开篇就讲解什么容器怎么实现、AOP怎么实现之类的写法。在描述的过程中,本书尽可能地把问题分解,使用剥洋葱的方式一层一层地将逻辑描述清楚,帮助读者由浅入深地进行学习,并把这些难点和问题各个击破,而不是企图一下让读者理解一个复杂的逻辑。
在阅读源码的过程中,我们难免会遇到各种各样的生僻功能,这些功能在特定的场合会非常有用,但是可能多数情况下并不是很常用,甚至都查阅不到相关的使用资料。本书中重点针对这种情况提供了相应的实用示例,让读者更加全面地了解Spring所提供的功能,对代码能知其然还知其所以然。
本书按照每章所提供的示例跟踪Spring源码的流程,尽可能保证代码的连续性,使读者的思维不被打乱,让读者看到Spring的执行流程,旨在尽量使读者在阅读完本书后即使在不阅读Spring源码的情况下也可以对Spring源码进行优化,甚至通过扩展源码来满足业务需求,这对开发人员来说是一个很高的要求。本书就希望能帮助读者全面提升实战能力。
本书结构
本书分为两部分:核心实现和企业应用。
● 第一部分 核心实现(第1~7章):是Spring功能的基础,也是企业应用部分的基础,主要对容器以及AOP功能实现做了具体的分析,如果读者之前没有接触过Spring源代码,建议认真阅读这个部分,否则阅读企业应用部分时会比较吃力。
● 第二部分 企业应用(第8~13章):在核心实现部分的基础上围绕企业应用常用的模块进行讨论,这些模块包括Spring整合JDBC、Spring整合MyBatis、事务、SpringMVC、远程服务、Spring消息服务等,旨在帮助读者在日常开发中更加高效地使用Spring。
本书适用的Spring版本
截至完稿,Spring已经发布了4.0.0.M1版本。本书虽然是基于Spring 3.2版本编写的,但所讨论的内容都属于Spring的基础和常用的功能,这些功能都经过长时间、大量用户的验证,已经非常成熟,改动的可能性相对较小。而且从目前Spring的功能规划来看,本书所涉及的内容并不在Spring未来改动的范围内,因此在未来的很长一段时间内本书都不会过时的。
感谢
创作的过程是痛苦的,持续时间也远远超乎了我的想象,而本以为自己对Spring已经非常的熟悉,但是在写作的过程中还是会遇到各种各样的问题,但是我很幸运我能坚持下来,在这里我首先应该感谢爸爸妈妈,虽然他们不知道儿子在忙忙碌碌地写些什么,但是他们对我始终如一的支持与鼓励使我更加坚定信心,在这里祝他们身体健康,同时还要感谢我最好的朋友孙亚超在我低落时给予我的关心与问候,当然要感谢的还有张雨绮同学,虽然并不是明星,但是却有着堪比明星般的美丽笑容,与她在一起的讨论总是让我受益匪浅,同时也感谢妹子王晶对稿件提供的建议与意见。最后感谢郭维云、郝云勃、郝俊、李兴全、梁晓颖、陈淼、孙伟超、王璐、刘瑞、单明、姚佳林、闫微微、李娇、时宇、李平、唐广亮、刘阳、黄思文、金施源等在整个编写过程中给予的支持与帮助。
联系作者
在编写本书过程中,以“够用就好”为原则,尽量覆盖到Spring开发的常用功能。所有观点都出自作者的个人见解,疏漏、错误之处在所难免,欢迎大家指正。读者如果有好的建议或者学习本书过程中遇到问题,请发送邮件到haojia_007@163.com,希望能够与大家一起交流和进步。
在看得见的地方学习知识,在看不到的地方学习智慧。祝愿大家在Spring的学习道路上顺风顺水。
作者
2013年7月