• Spring源码解析——如何阅读源码(转)


      最近没什么实质性的工作,正好有点时间,就想学学别人的代码。也看过一点源码,算是有了点阅读的经验,于是下定决心看下spring这种大型的项目的源码,学学它的设计思想。

      手码不易,转载请注明:xingoo

      这篇博文你可以了解到:

      1 Spring jar包以及源码使用

      2 简单的spring运行示例

      3 利用断点调试程序,如何快速的阅读程序【快捷键等的使用】

      这次阅读的源码比较老了,是3.0.5版本的,由于正好手头有这个版本的源码,而且平时基本上也是用的这个版本Spring,因此后文的分析也都是针对这个版本。

      下面贡献一下Jar包以及源码,由于百度云上传的压缩包总是解压失败,就放在csdn上面了。

      下面看一下如何使用jar包以及源码的source包

      首先,在工程右键,属性中,添加必要的jar包。

      选中必要的jar包,上面给出的源码jar包中,导入spring3.0.5中的所有jar包。

      其中lib内的是spring的jar包,用到哪个导入哪个,不知道的话,全部导入就行了。

      外面的几个jar包,用于日志以及mysql的驱动。commons-logging jar包是必须的,其他的随意吧。

      不确定的话,lib外面的这几个jar包以及lib里面的都导入就行了。

      导入jar包后,点开jar包,选中source attachment进行编辑,链接到源码的jar包。

      选择相应的source源码包

      全部导入后,如下

      下面给出一个简单的spring样例

      首先是一个必要的POJO类,用于注入属性的值。

    复制代码
     1 package com.test.bean;
     2 
     3 public class Person {
     4     
     5     private String name;
     6     private int age;
     7     
     8     public String getName() {
     9         return name;
    10     }
    11     public void setName(String name) {
    12         this.name = name;
    13     }
    14     public int getAge() {
    15         return age;
    16     }
    17     public void setAge(int age) {
    18         this.age = age;
    19     }
    20     public void info(){
    21         System.out.println("name:"+getName()+" age:"+getAge());
    22     }
    23 }
    复制代码

      主函数,用于读取资源文件,获取bean,调用info方法

    复制代码
     1 package testSpring;
     2 
     3 import org.springframework.context.ApplicationContext;
     4 import org.springframework.context.support.ClassPathXmlApplicationContext;
     5 
     6 import com.test.bean.Person;
     7 
     8 public class test {
     9     public static void main(String[] args){
    10         ApplicationContext ctx = new ClassPathXmlApplicationContext("bean.xml");//读取bean.xml中的内容
    11         Person p = ctx.getBean("person",Person.class);//创建bean的引用对象
    12         p.info();
    13     }
    14 }
    复制代码

      bean.xml用于配置bean的资源文件

    复制代码
     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     3     xmlns="http://www.springframework.org/schema/beans"
     4     xsi:schemaLocation="http://www.springframework.org/schema/beans
     5     http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
     6     <bean id="person" class="com.test.bean.Person">
     7         <property name="name" value="xingoo"/>
     8         <property name="age" value="12"/>
     9     </bean>
    10 </beans>
    复制代码

      运行结果

      如何阅读源码

      首先,有了前面的jar包以及源码包,你就可以通过这个简单的程序,进行但不的调试,阅读源码。

      简单的说下调试的快捷键:

      1 F5:下一步,可以进入下一个函数栈

      2 F6:当前函数的下一步,不会进入其他的函数。

      3 F8:下一个断点。

      4 也可以通过选中一个变量或者表达式,按ctrl+shift+i 来查看内容。或者添加监视的方式,查看。

      5 可以通过快捷键F2,来查看一个函数方法的javadoc,即说明

      6 快捷键F3或者ctrl+鼠标点击,进入一个函数

      7 ctrl+shift+G 查看当前方法都有谁在使用

      8 F4查看类的继承关系,可以向上显示出类继承的父类以及接口。

      有了调试的方法,接下来,就是如何阅读源码了!

      1 参考书籍,推荐《Spring技术内幕》

      这本书,基本上很详细的讲述了,spring的实现方式,以及类之间的复杂关系。可以帮助你快速的理清复杂的类之间的关系。

      2 使用StarUML画类图

      比如你好不容易理清了一个部分的关系,很快就会忘记其中的关系,那么可以通过这个工具,简单的画出其中的复杂关系。

      这样,下一次看的时候也会清楚一些,这是我今天刚画好的ClassPathXmlApplicationContext的类图关系:

      

     
     
    http://www.cnblogs.com/xing901022/p/4178963.html
     
     
     
     
  • 相关阅读:
    将图片制作数据拒
    python中PIL.Image,OpenCV,Numpy图像格式相互转换
    9、【Hive】初始化元数据库时失败,遇到org.apache.hadoop.hive.metastore.HiveMetaException: Schema initialization FAILED! Metastore state would be inconsistent
    8、【Hive Mysql】MySQL8 提示Public Key Retrieval is not allowed错误解决方法
    7.【Hive】hive启动出现权限错误 /tmp/hive on HDFS should be writable
    一、Zookeeper简明笔记
    6、System times on machines may be out of sync. Check system time and time zones
    5、利用搭建的hadoop集群计算wordcount时出现内存问题
    4、利用hadoop自带的mr 示例测试运行任务失败: Could not find or load main class org.apache.hadoop.mapreduce.v2.app.MRAppMaster
    3、hadoop运行jar包报错 : "/bin/bash: /bin/java: No such file or directory"
  • 原文地址:https://www.cnblogs.com/softidea/p/4180083.html
Copyright © 2020-2023  润新知