这是位大神提供的干货多多:
转自:http://www.zuoxiaolong.com/blog/article.ftl?id=32
这篇文章主要来源于和群里猿友的聊天,有猿友问LZ该如何学习一个框架。LZ想了想,这确实是一个值得探究的问题,于是这篇博文就应运而生了。接下来LZ就和各位猿友分享一下LZ个人学习框架的一些方式和方法,或许对大部分人还是有一些启迪作用的。
找到它的老家
对LZ个人来说,当LZ想要学习一个框架的时候,首要做的就是找到它的老家。打开你的浏览器,输入网址:www.google.com(为何不是百度?因为我们学习的框架几乎没有china的),然后输入你想学习的框架,比如spring(本文以它为例,其余其实都是类似的)。
第一个出现的一般就是它的老家,就像下面这样。
擦,剧情不该是这样的,导演掐了重新来一遍啊。该死的google老是这样。据之前LZ的某老师说,这都是度娘干的。
好吧,甭管是谁干的,我们只管不断F5即可,最终你会看到下面的画面。
bingo。画面出来了。这就是spring的老家,我们想要研究它就从它开始吧。接下来请你默默的打开它的链接。是的,默默的。
直入正题,找例子
接下来我们就要直入正题了,进入它的页面后,你会看到这样的导航。
看到了吗?看到了吗?
guides,LZ蹩脚的英文大概看出来它就是向导的意思,于是我们果断进来一看究竟。进来以后,你会发现一堆向导,这里就是你的百宝箱。
里面有各种各样的例子供你使用。接下来你需要做的就是按照其中某一个一步一步的做下去,直到完成你的目的。比如你想做一个任务调度器,那么就果断进入Scheduling Tasks。接下来,你就看到了这样一个无脑学习的页面。
看到了吗,你只需要ctrl+C/V就可以完成你的任务。不过这只是一个开始,因为这毕竟只是一个简单的例子,你还需要根据你当前的需要进行一些改变。如果你需要的正是这个例子,那么就再好不过了。
寻找文档
通常情况下,在你完成任务的过程当中,总会遇到这样或者那样的问题,就算没有遇到,如果想要学习一个框架的话,一个完整的说明文档往往也是你需要的。在接下来的过程当中,我们的任务就是寻找文档。这个过程往往是最困难和痛苦的,这与LZ蹩脚的英文有很大关系,所以每次找文档都让LZ痛苦并快乐着。
不过这里面总有一些大概的规律,比如doc、document、documentation这样的字样总是那么的亲切。而且我们不需要担心一个框架没有文档,因为对于开发它们的人来说,我们就是客户,就是上帝,所以他们必须要让上帝能看懂他们写的东西。否则的话,他们写的东西是没有客户的,没有客户就意味着没有创造价值,没有创造价值就意味着可能会被炒鱿鱼,被炒鱿鱼就意味着可能会被媳妇嫌弃,被媳妇嫌弃就意味着可能会被@#¥&绿#&%¥&*
LZ并不会把文档看的太深入,主要就是看一些自己开发需要的东西,还有很重要的一点就是,从当中找到框架的核心实现原理。比如spring当中,IOC的相关内容就是它的核心实现原理,因为spring的所有框架(比如AOP、security等等)都是建立在IOC的基础之上的。
寻找入口,跟踪源码
这下例子也看过了,任务也完成了,文档也有了,如果我们想要更加深入的了解一个框架,那么源码就是必不可少的一个环节了。说起来还是得感谢JAVA的开发氛围,几乎所有的东西都是开源的,所以你总能找到源码。
标题当中提到了入口,所谓寻找入口,就是寻找一个框架的切入点。比如spring的入口就在web.xml当中的监听器,而struts2的入口就是web.xml当中的过滤器,常用缓存的入口往往存在spring管理的缓存的定制工厂bean当中等等。
找到入口,你就能从头开始调试,了解整个框架初始化的过程,以及初始化后是如何工作的。在跟踪源码的过程中,最好结合你的例子,搞清楚你的例子是如何运行的。比如刚才的定时器调度,搞清楚spring是如何帮你进行调度的,比如执行任务的线程是如何分配的,任务的触发是如何进行的等等。
找到框架的优劣势并努力体会它
说到这里,请各位猿友想象一下,当你在逛商场的时候,如果你想要买某一样东西,一般情况下,你总会在各个品牌或者同一个品牌的不同类型之间相互比较,如果你从不这么做,请允许LZ尊称你为“土豪”。
如果你这么做了,请仔细的想想,你是在比较什么?
当然是优势和劣势了!
对于我们程序猿来说,框架就是一个一个的商品,而我们就是这些商品的客户。如果你想要做一个能买到物美价廉的商品的客户,就必须了解各个商品的优劣势。只有了解了各个商品的优劣势,我们才能在众多的框架当中选择合适的框架,你说是吗?
所以,不用说,我们要想了解一个框架,就必须知道它的优劣势,尤其是劣势。优势一般在框架的老家当中就能找到,因为这是在为他们的项目吹牛皮呢,他们的官网自然不会忘了这一项。至于劣势,就需要自己根据例子、源码以及其实现原理好好体会一下了。
结束语
框架说到底就是一个商品,我们只是其中一个用户罢了。因此LZ不建议各位猿友把框架的研究当做毕生梦想,更不建议各位沦陷于研究各种各样的框架,或者去尝试各种框架的例子,并很自豪的对着镜子说“你好厉害,你竟然会这么多框架”。注意!请你至少完成了以上几件事,再说你会这个框架吧。
框架只是我们针对特定场景所作出的选择,因此我们只需要有学习框架的能力即可,千万不要想着能把全世界所有品牌的牛奶都尝试着喝一遍,如果你非要这么做的话,LZ保证你一定会死于非命的。这就像你买药一样,你只需要知道当你感冒的时候应该吃什么药,当你拉肚子的时候应该吃什么药就好。更好的情况是,当你万一有其它毛病时,你也可以通过一些途径找到适合你的药。
话已至此,LZ就啰嗦到这里吧。总之,深入的研究一下少数几个优秀的框架,还是非常有益的,但不要贪多,学会适可而止即可。
版权声明:本文版权归作者(左潇龙)所有,欢迎转载。但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
|
|
|
|
|
|
|
|
</ul>
<div class="article_tag_div">
<p>关键字:
<a onclick="javascript:searchArticles('tag','程序猿')" href="javascript:void(0)" >程序猿</a>
<a onclick="javascript:searchArticles('tag','如何学习')" href="javascript:void(0)" >如何学习</a>
<a onclick="javascript:searchArticles('tag','框架学习')" href="javascript:void(0)" >框架学习</a>
</p>
</div>
<div class="article_category_div">
<p>分类:
<a onclick="javascript:searchArticles('category','编程之路')" href="javascript:void(0)" >编程之路</a>
</p>
</div>
<div class="nextinfo">
<p>上一篇:<a href="http://www.zuoxiaolong.com/blog/article.ftl?id=33">杂谈---程序猿的几种分类,你躺枪了吗?</a></p>
</div>
<div class="nextinfo">
<p>下一篇:<a href="http://www.zuoxiaolong.com/blog/article.ftl?id=31">深入理解计算机系统(4.1)---X86的孪生兄弟,Y86指令体系结构</a></p>
</div>
<!-- 评论列表 -->
<div class="feedback_area_title">评论列表(共<span id="comment_size">10</span>条评论)</div>
<div class="feedbackNoItems"></div>
<div class="feedbackItem" id="comment_list">
<div id="comment_div_663" class="feedbackItem">
<div class="feedbackListSubtitle">
<div class="feedbackManage">
<span class="comment_actions">
<a comment_id="663" class="reply_button" href="javascript:void(0)">回复</a>
<a comment_id="663" class="quite_button" href="javascript:void(0)">引用</a>
</span>
</div>
<a href="javascript:void(0)" class="layer">#1楼</a>
时间:<span class="comment_date">2014-03-01 09:26:00</span>
来源:<a id="commenter_a_663" href="javascript:void(0)">yonghu86</a>
</div>
<div class="feedbackCon">
<div id="comment_content_663" class="blog_comment_body">
这个顶下
站内搜索
<!-- 用户中心模块 -->
<div class="user_profile">
<h3>用户中心</h3>
<table id="login_table" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td style="font-size: 12px;">用户名:</td>
<td><input class="text_input" type="text" name="username"/></td>
<td><a id="login_register_button" href="#" class="button">登录 | 注册</a></td>
</tr>
<tr>
<td style="font-size: 12px;">密 码:</td>
<td><input class="text_input" type="password" name="password"/></td>
<td>
<!--
<a href="#" id="qq_login_button"><img width="50" height="20" src="http://www.zuoxiaolong.com/resources/img/qq_login.png" title="使用QQ登录"></a>
-->
</td>
</tr>
<tr>
<td> </td>
<td colspan="2" id="login_error_td" style="font-size:11px;">用户名支持字母,数字,下划线和中文</td>
</tr>
</tbody>
</table>
</div>
<!-- 关注模块 -->
<div class="follow_me">
<h3>关注我</h3>
<div class="follow_me_link">
<ul>
<li><a class="rss" href="http://www.zuoxiaolong.com/blog/feed.xml" target="_blank">RSS订阅</a></li>
<li><a class="douyu" href="http://www.douyu.com/zuoxiaolong" target="_blank">斗鱼直播</a></li>
<li><a class="github" href="http://github.com/xiaolongzuo" target="_blank">Github</a></li>
</ul>
</div>
</div>
<!-- 排行榜模块 -->
<div class="charts_tab" id="lp_right_select">
<!-- 排行榜切换 -->
<div class="charts_top">
<ul class="hd" id="tab">
<li class="cur"><a href="/blog/article_list.ftl?orderColumn=access_times¤t=1" title="点击查看更多">点击排行</a></li>
<li><a href="/blog/article_list.ftl?orderColumn=create_date¤t=1" title="点击查看更多">最新文章</a></li>
<li><a href="/blog/article_list.ftl?orderColumn=good_times¤t=1" title="点击查看更多">站长推荐</a></li>
</ul>
</div>
<div class="ms-main" id="ms-main">
<div style="display: block;" class="display_none charts_list">
<ul>
<li><a href="http://www.zuoxiaolong.com/blog/article.ftl?id=80" title="勤快的程序猿都没啥前途的,赶紧改掉你的坏毛病吧!">勤快的程序猿都没啥前途的,赶紧...</a></li>
<li><a href="http://www.zuoxiaolong.com/blog/article.ftl?id=8" title="记录2015年年初跳槽的经历!">记录2015年年初跳槽的经历!</a></li>
<li><a href="http://www.zuoxiaolong.com/blog/article.ftl?id=177" title="一个最新发现,原来程序员的最终归宿在这里。">一个最新发现,原来程序员的最终...</a></li>
<li><a href="http://www.zuoxiaolong.com/blog/article.ftl?id=25" title="六种流行的语言大餐---C、C++、python、Java、php、C#你更喜欢哪一个呢?">六种流行的语言大餐---C、C++、pyt...</a></li>
<li><a href="http://www.zuoxiaolong.com/blog/article.ftl?id=41" title="杂谈---第一次真正的高并发编程体验">杂谈---第一次真正的高并发编程...</a></li>
<li><a href="http://www.zuoxiaolong.com/blog/article.ftl?id=89" title="杂谈---这些大忌,你在面试的时候发生过吗?(NO.1)">杂谈---这些大忌,你在面试的时候...</a></li>
</ul>
</div>
<div class="display_none charts_list">
<ul>
<li><a href="http://www.zuoxiaolong.com/blog/article.ftl?id=261" title="一个屌丝程序猿的人生(五十九)">一个屌丝程序猿的人生(五十九)</a></li>
<li><a href="http://www.zuoxiaolong.com/blog/article.ftl?id=260" title="一个屌丝程序猿的人生(五十八)">一个屌丝程序猿的人生(五十八)</a></li>
<li><a href="http://www.zuoxiaolong.com/blog/article.ftl?id=259" title="一个屌丝程序猿的人生(五十七)">一个屌丝程序猿的人生(五十七)</a></li>
<li><a href="http://www.zuoxiaolong.com/blog/article.ftl?id=258" title="一个屌丝程序猿的人生(五十六)">一个屌丝程序猿的人生(五十六)</a></li>
<li><a href="http://www.zuoxiaolong.com/blog/article.ftl?id=257" title="一个屌丝程序猿的人生(五十五)">一个屌丝程序猿的人生(五十五)</a></li>
<li><a href="http://www.zuoxiaolong.com/blog/article.ftl?id=256" title="QQ群管理员申请帖(本次截止日期为2017-03-25)">QQ群管理员申请帖(本次截止日期...</a></li>
</ul>
</div>
<div class="display_none charts_list">
<ul>
<li><a href="http://www.zuoxiaolong.com/blog/article.ftl?id=80" title="勤快的程序猿都没啥前途的,赶紧改掉你的坏毛病吧!">勤快的程序猿都没啥前途的,赶紧...</a></li>
<li><a href="http://www.zuoxiaolong.com/blog/article.ftl?id=8" title="记录2015年年初跳槽的经历!">记录2015年年初跳槽的经历!</a></li>
<li><a href="http://www.zuoxiaolong.com/blog/article.ftl?id=184" title="回答阿里社招面试如何准备,顺便谈谈对于Java程序猿学习当中各个阶段的建议">回答阿里社招面试如何准备,顺便...</a></li>
<li><a href="http://www.zuoxiaolong.com/blog/article.ftl?id=176" title="送给即将毕业的同学,谈谈毕业后第一份工作和追女生的问题。">送给即将毕业的同学,谈谈毕业后...</a></li>
<li><a href="http://www.zuoxiaolong.com/blog/article.ftl?id=177" title="一个最新发现,原来程序员的最终归宿在这里。">一个最新发现,原来程序员的最终...</a></li>
<li><a href="http://www.zuoxiaolong.com/blog/article.ftl?id=56" title="浅谈程序猿的职业规划,看你如何决定自己的未来吧。">浅谈程序猿的职业规划,看你如何...</a></li>
</ul>
</div>
</div>
</div>
<!-- 最新评论模块 -->
<div class="new_comments">
<h3>最新评论</h3>
<ul>
<li>
<div class="new_comments_div">
<div>
<a href="/blog/article.ftl?id=261">1.《一个屌丝程序猿的人生(五十九)》</a>
</div>
<div class="new_comments_comment_body">
越来越有感觉了
</div>
<div>
<p class="new_comments_author">----成都市网友</p>
</div>
<div style="clear:both"></div>
</div>
</li>
<li>
<div class="new_comments_div">
<div>
<a href="/blog/article.ftl?id=260">2.《一个屌丝程序猿的人生(五十八)》</a>
</div>
<div class="new_comments_comment_body">
这情节很刺激嘛!扎心了,老铁...
</div>
<div>
<p class="new_comments_author">----北京市网友</p>
</div>
<div style="clear:both"></div>
</div>
</li>
<li>
<div class="new_comments_div">
<div>
<a href="/blog/article.ftl?id=188">3.《一个屌丝程序猿的人生(一)》</a>
</div>
<div class="new_comments_comment_body">
挺有意思,试试不注册可以评论不
</div>
<div>
<p class="new_comments_author">----大连市网友</p>
</div>
<div style="clear:both"></div>
</div>
</li>
<li>
<div class="new_comments_div">
<div>
<a href="/blog/article.ftl?id=18">4.《高并发下的九死一生,一个不小心就掉入万丈深渊》</a>
</div>
<div class="new_comments_comment_body">
楼主再解释下为什么高并发下该函数就会出现exception就好了?
</div>
<div>
<p class="new_comments_author">----ismallboy</p>
</div>
<div style="clear:both"></div>
</div>
</li>
<li>
<div class="new_comments_div">
<div>
<a href="/blog/article.ftl?id=110">5.《(十五)建造者模式详解(都市异能版)》</a>
</div>
<div class="new_comments_comment_body">
@ 赫连勃勃大王引用Doppelgenger和具体的Builder类之间的关系不是聚合吗,应该是实线+...
</div>
<div>
<p class="new_comments_author">----麦浪无垠</p>
</div>
<div style="clear:both"></div>
</div>
</li>
</ul>
</div>
<!-- 标签模块 -->
<div class="tag_div">
<h3>标签云</h3>
<ul>
<form id="" action="http://www.zuoxiaolong.com/blog/article_list.ftl" type="POST">
<input type="hidden" name="tag" value="jquery源码">
</form>
<li><a onclick="javascript:searchArticles('tag','jquery源码')" href="javascript:void(0)" title="jquery源码">jquery源码</a></li>
<form id="" action="http://www.zuoxiaolong.com/blog/article_list.ftl" type="POST">
<input type="hidden" name="tag" value="面试准备">
</form>
<li><a onclick="javascript:searchArticles('tag','面试准备')" href="javascript:void(0)" title="面试准备">面试准备</a></li>
<form id="" action="http://www.zuoxiaolong.com/blog/article_list.ftl" type="POST">
<input type="hidden" name="tag" value="阿里巴巴">
</form>
<li><a onclick="javascript:searchArticles('tag','阿里巴巴')" href="javascript:void(0)" title="阿里巴巴">阿里巴巴</a></li>
<form id="" action="http://www.zuoxiaolong.com/blog/article_list.ftl" type="POST">
<input type="hidden" name="tag" value="hotspot源码">
</form>
<li><a onclick="javascript:searchArticles('tag','hotspot源码')" href="javascript:void(0)" title="hotspot源码">hotspot源码</a></li>
<form id="" action="http://www.zuoxiaolong.com/blog/article_list.ftl" type="POST">
<input type="hidden" name="tag" value="JVM源码">
</form>
<li><a onclick="javascript:searchArticles('tag','JVM源码')" href="javascript:void(0)" title="JVM源码">JVM源码</a></li>
<form id="" action="http://www.zuoxiaolong.com/blog/article_list.ftl" type="POST">
<input type="hidden" name="tag" value="程序猿的工作">
</form>
<li><a onclick="javascript:searchArticles('tag','程序猿的工作')" href="javascript:void(0)" title="程序猿的工作">程序猿的工作</a></li>
<form id="" action="http://www.zuoxiaolong.com/blog/article_list.ftl" type="POST">
<input type="hidden" name="tag" value="tcp/ip">
</form>
<li><a onclick="javascript:searchArticles('tag','tcp/ip')" href="javascript:void(0)" title="tcp/ip">tcp/ip</a></li>
<form id="" action="http://www.zuoxiaolong.com/blog/article_list.ftl" type="POST">
<input type="hidden" name="tag" value="程序员面试">
</form>
<li><a onclick="javascript:searchArticles('tag','程序员面试')" href="javascript:void(0)" title="程序员面试">程序员面试</a></li>
</ul>
</div>
<!-- 图文模块 -->
<div class="tuwen">
<h3>随机推荐</h3>
<ul>
<li><a href="http://www.zuoxiaolong.com/blog/article.ftl?id=18" title="高并发下的九死一生,一个不小心就掉入万丈深渊"><img src="http://www.zuoxiaolong.com/resources/img/common/article_01.jpg"><b>高并发下的九死一生,...</b></a>
<p><span class="tulanmu"><a href="#">左潇龙</a></span><span
class="tutime">2014-09-06</span>
</p>
</li>
<li><a href="http://www.zuoxiaolong.com/blog/article.ftl?id=235" title="万能的林萧说:我来告诉你,一个草根程序员如何进入BAT。"><img src="http://www.zuoxiaolong.com/resources/img/common/article_15.jpg"><b>万能的林萧说:我来告...</b></a>
<p><span class="tulanmu"><a href="#">左潇龙</a></span><span
class="tutime">2016-10-31</span>
</p>
</li>
<li><a href="http://www.zuoxiaolong.com/blog/article.ftl?id=75" title="算法(JAVA)----两道小小课后题"><img src="http://www.zuoxiaolong.com/resources/img/common/article_15.jpg"><b>算法(JAVA)----两道小...</b></a>
<p><span class="tulanmu"><a href="#">左潇龙</a></span><span
class="tutime">2013-09-18</span>
</p>
</li>
<li><a href="http://www.zuoxiaolong.com/blog/article.ftl?id=60" title="强迫自己学习(实践篇),以及关于写博客的几点建议"><img src="http://www.zuoxiaolong.com/resources/img/common/article_16.jpg"><b>强迫自己学习(实践篇)...</b></a>
<p><span class="tulanmu"><a href="#">左潇龙</a></span><span
class="tutime">2013-10-01</span>
</p>
</li>
<li><a href="http://www.zuoxiaolong.com/blog/article.ftl?id=103" title="(二十二)访问者模式详解(伪动态双分派)"><img src="http://www.zuoxiaolong.com/resources/img/common/article_03.jpg"><b>(二十二)访问者模式详...</b></a>
<p><span class="tulanmu"><a href="#">左潇龙</a></span><span
class="tutime">2013-08-17</span>
</p>
</li>
</ul>
</div>
<!-- 链接模块 -->
<div class="links">
<h3><span>[<a href="#">申请友情链接</a>]</span>友情链接</h3>
<ul>
<li><a href="http://www.qidian.com" target="_blank">起点中文网</a> </li>
<li><a href="http://www.csdn.net" target="_blank">CSDN</a></li>
<li><a href="http://www.cnblogs.com" target="_blank">博客园</a></li>
<li><a href="http://blog.chinaunix.net" target="_blank">chinaunix</a></li>
<li><a href="http://blog.51cto.com" target="_blank">51CTO</a></li>
<li><a href="http://www.iteye.com" target="_blank">iteye</a> </li>
</ul>
</div> </div>
支持(0)
反对(0)