作为一个程序猿你必须会的技能----自学框架!

这是位大神提供的干货多多:
转自: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就啰嗦到这里吧。总之,深入的研究一下少数几个优秀的框架,还是非常有益的,但不要贪多,学会适可而止即可。

  


版权声明:本文版权归作者(左潇龙)所有,欢迎转载。但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

12
精彩
1
感动
0
搞笑
0
开心
0
愤怒
0
无聊
0
灌水
0
惊讶
    </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>&nbsp;&nbsp;&nbsp;&nbsp;
                时间:<span class="comment_date">2014-03-01 09:26:00</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                来源:<a id="commenter_a_663" href="javascript:void(0)">yonghu86</a>
            </div>
            <div class="feedbackCon">
                <div id="comment_content_663" class="blog_comment_body">

这个顶下







#2楼    
时间:2014-03-01 09:54:00     
来源:快刀客



必须顶,。。关注







#3楼    
时间:2014-03-01 11:25:00     
来源:poet_lj



LZ很幽默,话不糙,理不糙,顶







#4楼    
时间:2014-03-01 12:04:00     
来源:mingyueruya



这个可以顶一下的







#5楼    
时间:2014-03-01 12:37:00     
来源:中了剑的刺猬



“寻找入口,跟踪源码”这句话非常赞同~顶一下~







#6楼    
时间:2014-03-01 18:07:00     
来源:过错



题目的起的太大了吧







#7楼    
时间:2014-03-01 19:03:00     
来源:左潇龙


@ 中了剑的刺猬
@mingyueruya
@poet_lj
@快刀客
@yonghu86
多谢五位施主的支持,贫僧这里有礼了。







#8楼    
时间:2014-03-01 19:03:00     
来源:左潇龙


@ 过错
抱歉,施主,把您忽悠进来了。







#9楼    
时间:2014-03-03 08:57:00     
来源:Never_Land



楼主,文章大标题的那个绿色的背景是咋弄的,新添加的css样式?







#10楼    
时间:2014-03-04 18:55:00     
来源:小小小水滴



有理,得顶,LZ,做个朋友吧。(^o^)/~







发表评论
















站内搜索






<!-- 用户中心模块 -->
<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">登录&nbsp;|&nbsp;注册</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>
                    -->
                    &nbsp;
                </td>
            </tr>
            <tr>
                <td>&nbsp;</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&current=1" title="点击查看更多">点击排行</a></li>
            <li><a href="/blog/article_list.ftl?orderColumn=create_date&current=1" title="点击查看更多">最新文章</a></li>
            <li><a href="/blog/article_list.ftl?orderColumn=good_times&current=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>


SyntaxHighlighter.all(); var contextPath = "http://www.zuoxiaolong.com"; window.onload = function () { var tabElement = document.getElementById("tab"); var msMainElement = document.getElementById("ms-main"); if (!tabElement || !msMainElement) { return; } var liElement = tabElement.getElementsByTagName("li"); var divElement = msMainElement.getElementsByTagName("div"); for (var i = 0; i
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章