Spring 源碼地址:https://github.com/spring-projects/spring-frameworkjava
由於 Spring 是分模塊的,因此閱讀 Spring 3.2.11 版本的源碼過程打算先從最底層的模塊開始,而後再由下向上分析每個模塊的實現過程。在閱讀過程當中,隨着對代碼的理解加深,也會從新閱讀已經讀過的代碼。git
大概的閱讀順序:github
先研究下Spring的 IoC容器:web
BeanFactory bf =new XmlBeanFactory(new ClassPathResource("beanFactoryTest.xml")); MyTestBean bean = (MyTestBean)bf.getBean("test");
以上是Spring容器的簡單實現,構造XmlBeanFactory這個IoC容器,須要指定BeanDefinition的消息來源,而這個消息來源須要封裝成Spring中的Resource類來給出。Resource是Spring用來封裝I/O操做的類。好比:這裏咱們的BeanDefinition信息是以XML文件形式存在,new ClassPathResource("beanFactoryTest.xml")來構造Resource資源文件實例對象,而後將Resource做爲構造參數傳遞給XmlBeanFactory構造函數。這樣,Ioc容器就能夠方便的定位到須要BeanDefinition信息來對Bean完成容器的初始化和依賴注入的過程。spring
下面跟進去看下源碼設計模式
看源碼:數組
這裏進行XmlBeanFactory的初始化時,用Resource接口做爲方法參數傳遞,爲何會用接口做爲參數傳遞?你們能夠參考這個http://blog.csdn.net/woainike/article/details/6620862博客來理解其中的設計(能夠看看23種模式下的代理模式http://blog.csdn.net/jackiehff/article/details/8621517、 Java設計模式——代理模式實現及原理)。架構
(通俗解釋:
好比,我這個方法傳進來的參數必須是動物(能吃飯,睡覺);具體是什麼動物我無論。
你調用這個方法時,就必須傳個具體動物進來,這個動物必須能吃飯睡覺,不然我不接受。每種動物如何吃飯,睡覺還不同,就看你具體傳進來是什麼動物)函數
構造完Resource資源文件實例對象,這樣後續的資源處理就能夠用Resource提供的各類服務來操做了。工具
下面看下Resource的層次結構圖:那麼Resource(配置文件)資源時如何封裝的?
Resource接口抽象了內部全部用到底層資源:File、ClassPath、Url等。對不一樣來源的資源文件都有相應的Resource實現。好比文件(FileSystemResource)、Byte數組(ByteArrayResource)、資源(ClassPathResource)等。
ClassPathResource中的實現方是經過class或者classLoader提供的底層方法進行調用。
未完待續。。
參考書籍:
Spring源碼深度解析
Spring技術內幕--深刻解析Spring架構與設計原理
參考博客:
1000行代碼讀懂Spring(一)- 實現一個基本的IoC容器
https://my.oschina.net/flashsword/blog/192551