① 怎么阅读Spring源码
学习源码是一件非常耗时费力的事情,需要有足够的时间和持久的耐心,下面是我阅读郝佳老师的《Spring源码深度解析》所做的记录,书中以Spring3.2讲解,使用jdk1.7。
准备工作
1. 安装github:现在spring源代码都在github管理,所以首先需要下载githup,下;
2. 安装gradle构建工具: 下载完后进行解压到任意盘符,然后增加环境变量GRADLE_HOME,并在环境变量bin中增加%GRADLE_HOME%/bin,打开DOS窗口,运行gradle -v,出现版本号等信息,表示安装成功;
3. 下载Spring源码:首先打开git shell,切换到你的工作目录,然后输入以下命令:git clone git://github.com/SpringSource/Spring-framework.git,后面一串是源码下载地址。大概半小时的样子,就可以下载完成,这时候在你的工作目录中就会出现Spring-framework的目录,里面有Spring各组件的源码包;
4. 构建导入:下载下来的代码不能直接导入Eclipse,要先转换成Eclipse能读取的形式。因为所有组件都会依赖spring-core,所有我们首先要转换Spring-core工程,在命令窗口切换到Spring-core工程,运行gradle cleanidea eclipse命令,我们会看到开始下载工程所依赖的jar包,几分钟后执行完毕,再来看Spring-core文件夹,多了.classpath、.project等文件,这是Eclipse工程所必须的,然后可以把他导入到eclipse。因为大部分Spring组件都会用到 spring-beans、spring-context、spring-aop,而他们又依赖spring-expression、spring-instrument,所以我们干脆先把这些工程都进行转换并导入eclipse。
学习的最好途径就是看书。看书有两点好处:看完书之后再次提升自我的最好途径是看一些相关的好博文。一本书往往有好几百页,好的博文是自己看书学习之后的一些总结和提炼,对于梳理学习的内容很有好处。接下来,我将推荐给Java程序员们一些好书。
一、《深入理解Java虚拟机:JVM高级特性与最佳实践》
如果你不满足于做一个只会写if…else…的Java程序员,而是希望更进一步,这本《深入理解Java虚拟机:JVM高级特性与最佳实践》是你的不二之选。它可以帮助你了解Java代码的底层运行机制,定位性能问题,对整个系统进行性能调优,解决各种线上线下的问题,甚至为自己的项目量身定做一款适合自己项目的虚拟机。这本书作者是周志明,是国内写得最好的有关Java虚拟机的书籍之一。我至少已经看了这本书5遍,因为它对于Java虚拟机的讲解深入浅出,适合各个层次的读者。
二、《HotSpot实战》
所有Java虚拟机都是遵循Java虚拟机规范的,市面上的Java虚拟机有几十款,《深入理解Java虚拟机:JVM高级特性与最佳实践》一书讲解的虚拟机并不针对某种特定的虚拟机,而是从Java虚拟机规范的角度来讲解Java虚拟机。而我们平时使用的乃至商用的大多数Java虚拟机都是Sun公司的HotSpot,这本书能够帮助你深入了解HotSpot虚拟机的实现细节。作者是陈涛,由于HotSpot的源码都是C/C++写的,所以要求读者有非常好的C/C++基础。对于不太熟悉C/C++的朋友,看这本书可能帮助不是很大。
三、《Java并发编程实战》
这是一本常常被列入Java程序员必读十大书籍排行榜前几位的书,不过个人不是很推荐这本书。文字多代码少,讲解多实践少。这本书前前后后我也看了两遍左右,感觉很枯燥。不过作为一本位于排行榜前几名的书,还是值得推荐给大家的。
四、《java多线程编程核心技术》
这本书是我大力推荐的,我的个人博客里面二十多篇的多线程博文都是基于此书,并且在这本书的基础上进行提炼和总结而写出来的。此书大篇幅的代码+小篇幅的精讲解,适合中国人偏向实用主义的写作风格。本书关于线程安全、synchronized、Reentrant、Timer等等都用详细的代码进行了讲解,非常有实践价值。有兴趣的朋友跟着这本书敲代码、运行、思考,三步走,对于多线程的使用与理解一定会进几大步。
五、《Effective Java中文版》
这是唯一一本我没有买的书。这本书的知名度以及其作者的来头,我相信这一定是一本值得一看的好书。初识这本书,是在我的博文Java代码优化(长期更新)里面,底下评论的时候有朋友提到了这本书,当时我说要去买,不过这两个月一直都没时间去逛书店,甚是遗憾,之后肯定会找时间去买这本书的。这本书的作者是Joshua Bloch,他是谷歌的首席架构师,属于超级技术大牛级别。
六、《深入分析Java Web技术内幕》
这本书非常全,HTTP、DNS、CDN、静态化、Jetty、Tomcat、Servlet、Spring、MyBatis等等,什么都有,涉及知识面非常广。不过,尽管每个知识点的篇幅都不多,但是重点都基本讲到了,是一本让人真正有收获的书。如果想进一步了解这些技术的技术内幕,就要自己去买相关书籍或者自己上网查资料了。
七、《大型网站技术架构 核心原理与案例分析》
这本书是屌、很屌、非常屌级别的。这本书详细讲解了分布式系统的知识点,多看几遍,对分布式的理解一定会加深不少。而且里面不仅仅是分布式的知识,还非常接地气地写了如何做一个好的架构师,这不仅仅是写给想做架构师的读者看的,就是给读者一些建议,如何更好地提出意见、如何更让别人关注你的声音、如何看到他人的优点,入木三分,让人获益匪浅。
八、《大型网站系统与Java中间件实践》
这本书的部分内容和上面一本《大型网站技术架构 核心原理与案例分析》有所重合,像分布式系统的演化、CDN、CAP理论和BASE理论等等。适合对分布式系统比较熟悉并且想要往中间件方面有一定研究的读者。本书要突出的重点是中间件三个字,中间件是分布式系统中一个非常重要的东西,其最重要的作用应该就是解耦,降低模块与模块之间的强依赖,不同的模块之间的依赖度降低,便可以各自独立地开发自己的功能。
九、《从Paxos到ZooKeeper 分布式一致性原理与实践》
这本书是从分布式系统基本理论开始讲起,讲到Paxos算法,最后慢慢引入到Zookeeper,循序渐进。适合有志向做一个出色的大型网站架构师、公司的技术总监之类的朋友。如果网友们所在的公司在使用Zookeeper,并且你又对Zookeeper感兴趣想要研究一下它的原理的,这本书将是不二之选。
十、《MySQL5.6从零开始学》
作为一名Java程序员,学习数据库是必须掌握的一门知识。这本书讲解MySQL5.6的全面知识点,内容很细致、很全面,适合Java程序员学习。MySQL相比Oracle更轻量级、更小、安装和卸载更方便,因此学习起来更为方便。并且,随着2009年阿里巴巴去IOE的运动,MySQL成为了互联网公司使用的主流数据库之一。
十一、《Spring源码深度解析》
Spring框架做得太好了,功能太强大了,这导致一旦你的程序使用Spring,出了问题,可能需要上网查资料或者问别人解决。研读Spring的源代码不失为一种很好的学习方法,这有很多好处:理解框架内部的实现之后,可以主动去解决问题;Spring框架内部实现用到了很多设计模式,可以提高你写代码和理解设计模式的能力;研究Spring框架可以大大增强你读代码的能力。总的来说,我推荐《Spring源码深度解析》一书,这本书在近400页的篇幅中尽量去讲解Spring源代码是如何实现的,有助于对Spring的实现有更深度的理解。
以上就是我推荐给Java开发者们的一些值得一看的好书。对于Java基础知识的学习,我提两点建议:多写多敲代码,好的代码与扎实的基础知识一定是实践出来的;可以去尚学堂下载一下马士兵的视频来学习一下Java基础,还挺不错的。
③ spring源码深度解析这本书怎么样
您好,希望以下回答能帮助您
《SPRING技术内幕——深入解析SPRING架构与设计原理》
该书讲了spring的ioc容器原理,在xml的spring配置文件中,对象是如何解析并生成的。
spring的aop,面向切面编程。这两块是比较重要的,属于核心部分。
其他的如spring mvc ,spring jdbc与hibernate,ibatise集成,spring事务,spring security,
spring 任务调度都有介绍。
大体来说,属于跟着代码走向,一个类一个类介绍了一下。其实代码都是有英文注释的。
跟着作都的思路看过来也还是可以的,最好是对照类图分析。
如您还有疑问可继续追问。
④ 怎么阅读spring源码
从HttpServletBean的init()进入,再到initWebApplicationContext(),再到refresh(),再到refreshBeanFactory(),再到finishRefresh(),直到服务器启动成功。不知道读了多少遍,
但是源码的东西实在的太多了,想要完全读懂,完全理清头绪,还差很远啊。所以我只重点关注了两块内容,就是bean的定位加载解析注册、bean的实例化两大块内容,其他地方稍作了解,没有太过深入。
整个容器的启动流程,都在AbstractApplicationContext的refresh()的模板方法中了。
复制代码
1 public void refresh() throws BeansException, IllegalStateException {
2 synchronized (this.startupShutdownMonitor) {
3 // Prepare this context for refreshing.
4 prepareRefresh();
5
6 // Tell the subclass to refresh the internal bean factory.
7 beanFactory = obtainFreshBeanFactory();
8
9 // Prepare the bean factory for use in this context.
10 prepareBeanFactory(beanFactory);
11
12 try {
13 // Allows post-processing of the bean factory in context subclasses.
14 postProcessBeanFactory(beanFactory);
15
16 // Invoke factory processors registered as beans in the context.
17 (beanFactory);
18
19 // Register bean processors that intercept bean creation.
20 registerBeanPostProcessors(beanFactory);
21
22 // Initialize message source for this context.
23 initMessageSource();
24
25 // Initialize event multicaster for this context.
26 ();
27
28 // Initialize other special beans in specific context subclasses.
29 onRefresh();
30
31 // Check for listener beans and register them.
32 registerListeners();
33
34 // Instantiate all remaining (non-lazy-init) singletons.
35 (beanFactory);
36
37 // Last step: publish corresponding event.
38 finishRefresh();
39 }
40
41 catch (BeansException ex) {
42 // Destroy already created singletons to avoid dangling resources.
43 destroyBeans();
44
45 // Reset 'active' flag.
46 cancelRefresh(ex);
47
48 // Propagate exception to caller.
49 throw ex;
50 }
51 }
52 }
其实,我并没有上来就看源码,而是先从看书开始,稍微了解,知道了一些关键点,关键流程,自己产生了一堆疑问,然后带着疑问去读源码,读着读着,发现有些疑问就这么解决了。