【源码阅读】技巧篇

前言

开源项目很多,各式各样的源码是我们学习的宝库,而打开源码,满屏的代码和英文注释极大地降低了阅读兴趣和效率。怎样有效地提升效率,并提升兴趣呢?下面说说我自己的小技巧......

1.系统架构

先找到框架的官方文档,官方文档权威且可信,避免阅读二手文档的误导,还有在阅读二手文档时我尝尝会有怀疑,这会消耗你的经历。

找到Get Start页面,一般会有框架或者项目的整体架构、层次依赖关系,可以让你在阅读之前有了初步的了解。如果没有可以根据maven的dependency:tree查看依赖,或者用idea的Dependency Analyzer查看

还可以熟悉项目的包层次

2.让程序跑起来

如想看JDK源码,直接把源码导入到IDE中,然后写简单的测试用例,main函数或者junit test都行,打断点,debug进框架代码,过程中会有各个变量的取值,会比单纯看代码要形象的多。

框架代码也是,通过maven下载源码,写demo,debug

比如我看spring框架IOC部分时,先写了最简单的demo

<?xml version="1.0" encoding="UTF-8"?>
<beans default-autowire="byName" xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
                           http://www.springframework.org/schema/beans/spring-beans.xsd">
    <bean id="student" class="framework.model.Student" >
        <property name="name" value="KAOMA" />
        <property name="eye" ref="eye" />
    </bean>
    <bean id="eye" class="framework.model.Eye" >
        <property name="cap" value="1" />
    </bean>
</beans>
public class XmlACDemo {
    public static void main(String[] args) throws Exception {
        ApplicationContext ac=new ClassPathXmlApplicationContext("framework/applicationContext2.xml");
        Student s=(Student)ac.getBean("student");
        System.out.println("学生"+s.getName() + "的眼睛视力是" + s.getEye().getCap());
    }
}

public class Eye {
    private int cap;
    public void look(){
        System.out.println("视力"+cap);
    }
    public int getCap() {
        return cap;
    }
    // getter setters
}

public class Student {

    private String name;
    private Eye eye ;

    // getter setters
}

断点打在getBean(...)那一行,然后强制跳进框架代码,一步一步跟进去,可以从网上搜以下别人的源码解读,哪些关键的语句,加断点跟进去看。

3.从入口进去读

普通应用程序 从main函数开始

如web项目,从最常用的url接口,一步步跳进代码中,梳理流程

怎样从自己想看的部分找到入口呢,可以选中方法,查看Call Hierarchy,查看方法的被调用层次

3.类图工具

可以通过IDE的类图工具(选中类、或者包右击,点击show Diagram或者使用快捷键)可以画出当前类的继承层次关系,

还可以选择显示类成员,包括字段、方法、属性、内部类。

4.时序图工具

选中方法,右击点击时序图工具,能够生成该方法的时序图。

发布了92 篇原创文章 · 获赞 14 · 访问量 5844

猜你喜欢

转载自blog.csdn.net/sarafina527/article/details/103123559