最近沒什么實質性的工作,正好有點時間,就想學學別人的代碼。也看過一點源碼,算是有了點閱讀的經驗,于是下定決心看下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的類圖關系: