⑴ 如何 閱讀 spring 源碼或者說怎麼學習java源碼一堆的類從哪開始看
看你想研究什麼功能模塊,從最關鍵的類一步步跟蹤下去,看它是如何實現功能的。
⑵ 如何查看spring源碼
1.准備工作:在官網上下載了Spring源代碼之後,導入Eclipse,以方便查詢。
2.打開我們使用Spring的項目工程,找到Web.xml這個網站系統配置文件,在其中找到Spring的初始化信息:
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
由配置信息可知,我們開始的入口就這里ContextLoaderListener這個監聽器。
在源代碼中我們找到了這個類,它的定義是:
public class ContextLoaderListener extends ContextLoader
implements ServletContextListener {
…
/**
* Initialize the root web application context.
*/
public void contextInitialized(ServletContextEvent event) {
this.contextLoader = createContextLoader();
if (this.contextLoader == null) {
this.contextLoader = this;
}
this.contextLoader.initWebApplicationContext(event.getServletContext());
}
...
}
該類繼續了ContextLoader並實現了監聽器,關於Spring的信息載入配置、初始化便是從這里開始了,具體其他閱讀另外寫文章來深入了解。
二、關於IOC和AOP
關於Spring IOC 網上很多相關的文章可以閱讀,那麼我們從中了解到的知識點是什麼?
1)IOC容器和AOP切面依賴注入是Spring是核心。
IOC容器為開發者管理對象之間的依賴關系提供了便利和基礎服務,其中Bean工廠(BeanFactory)和上下文(ApplicationContext)就是IOC的表現形式。BeanFactory是個介面類,只是對容器提供的最基本服務提供了定義,而DefaultListTableBeanFactory、XmlBeanFactory、ApplicationContext等都是具體的實現。
介面:
public interface BeanFactory {
//這里是對工廠Bean的轉義定義,因為如果使用bean的名字檢索IOC容器得到的對象是工廠Bean生成的對象,
//如果需要得到工廠Bean本身,需要使用轉義的名字來向IOC容器檢索
String FACTORY_BEAN_PREFIX = "&";
//這里根據bean的名字,在IOC容器中得到bean實例,這個IOC容器就象一個大的抽象工廠,用戶可以根據名字得到需要的bean
//在Spring中,Bean和普通的JAVA對象不同在於:
//Bean已經包含了我們在Bean定義信息中的依賴關系的處理,同時Bean是已經被放到IOC容器中進行管理了,有它自己的生命周期
Object getBean(String name) throws BeansException;
//這里根據bean的名字和Class類型來得到bean實例,和上面的方法不同在於它會拋出異常:如果根名字取得的bean實例的Class類型和需要的不同的話。
Object getBean(String name, Class requiredType) throws BeansException;
//這里提供對bean的檢索,看看是否在IOC容器有這個名字的bean
boolean containsBean(String name);
//這里根據bean名字得到bean實例,並同時判斷這個bean是不是單件,在配置的時候,默認的Bean被配置成單件形式,如果不需要單件形式,需要用戶在Bean定義信息中標注出來,這樣IOC容器在每次接受到用戶的getBean要求的時候,會生成一個新的Bean返回給客戶使用 - 這就是Prototype形式
boolean isSingleton(String name) throws NoSuchBeanDefinitionException;
//這里對得到bean實例的Class類型
Class getType(String name) throws NoSuchBeanDefinitionException;
//這里得到bean的別名,如果根據別名檢索,那麼其原名也會被檢索出來
String[] getAliases(String name);
}
實現:
XmlBeanFactory的實現是這樣的:
public class XmlBeanFactory extends DefaultListableBeanFactory {
//這里為容器定義了一個默認使用的bean定義讀取器,在Spring的使用中,Bean定義信息的讀取是容器初始化的一部分,但是在實現上是和容器的注冊以及依賴的注入是分開的,這樣可以使用靈活的 bean定義讀取機制。
private final XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(this);
//這里需要一個Resource類型的Bean定義信息,實際上的定位過程是由Resource的構建過程來完成的。
public XmlBeanFactory(Resource resource) throws BeansException {
this(resource, null);
}
//在初始化函數中使用讀取器來對資源進行讀取,得到bean定義信息。這里完成整個IOC容器對Bean定義信息的載入和注冊過程
public XmlBeanFactory(Resource resource, BeanFactory parentBeanFactory) throws
BeansException {
super(parentBeanFactory);
this.reader.loadBeanDefinitions(resource);
}
⑶ 怎麼閱讀Spring源碼
學習源碼是一件非常耗時費力的事情,需要有足夠的時間和持久的耐心,下面是我閱讀郝佳老師的《Spring源碼深度解析》所做的記錄,書中以Spring3.2講解,使用jdk1.7。
准備工作
1. 安裝github:現在spring源代碼都在github管理,所以首先需要下載githup,下;
2. 安裝gradle構建工具: 下載完後進行解壓到任意盤符,然後增加環境變數GRADLE_HOME,並在環境變數bin中增加%GRADLE_HOME%/bin,打開DOS窗口,運行gradle -v,出現版本號等信息,表示安裝成功;
3. 下載Spring源碼:首先打開git shell,切換到你的工作目錄,然後輸入以下命令:git clone git://github.com/SpringSource/Spring-framework.git,後面一串是源碼下載地址。大概半小時的樣子,就可以下載完成,這時候在你的工作目錄中就會出現Spring-framework的目錄,裡面有Spring各組件的源碼包;
4. 構建導入:下載下來的代碼不能直接導入Eclipse,要先轉換成Eclipse能讀取的形式。因為所有組件都會依賴spring-core,所有我們首先要轉換Spring-core工程,在命令窗口切換到Spring-core工程,運行gradle cleanidea eclipse命令,我們會看到開始下載工程所依賴的jar包,幾分鍾後執行完畢,再來看Spring-core文件夾,多了.classpath、.project等文件,這是Eclipse工程所必須的,然後可以把他導入到eclipse。因為大部分Spring組件都會用到 spring-beans、spring-context、spring-aop,而他們又依賴spring-expression、spring-instrument,所以我們乾脆先把這些工程都進行轉換並導入eclipse。
⑷ ECLIPSE下查看spring源碼問題
你得從spring網站上把source包下下來,然後把那個包關聯一下就可以了
⑸ 請問怎樣掌握和學習Spring源代碼
想請教一下有對Spring源代碼有興趣,而且是已經深入理解的高手,大俠們。 我曾經多次對Spring源代碼進行閱讀,都沒有收到什麼效果,發現太難入手了,我存在的問題就是,無法掌握它的脈絡,類的依賴關系太過復雜,感覺每個類都要去閱讀。所以這樣我掉入了深淵。就很難堅持下去了,而且看了也等於沒看一樣,我看的目的就是想學習高手在寫代碼的思想。巧妙之處,以至為我自己所用!能多給點意見。。謝謝啦. 問題補充:補充一點就是,我使用Spring已經有幾年了,只是想去認真閱讀他的實現原理,和學習優秀的設計。 問題補充:kisa1022 寫道最好能參與項目,實踐多了自然能有所領悟。閱讀代碼為主,一般提高的速度很慢的。你可以看好的代碼,理解代碼中的思想,然後一定要把獲取的思想進行實踐。謝謝你的回復,我其實用Spring做過好幾個項目,只是沒有去學習他的內在的實現。我現在就是想提高自己的編碼水平。學習大師級別的人如何設計。
⑹ 如何學習springmvc源代碼
首先要了解設計模式,這個是閱讀大師源碼的一個橋梁,很多代碼看上去很多,其實就是一種模式。了解了模式後,整個關系圖就清楚了。
還有善於分片閱讀,找簡單的讀,可以先讀spring jdbc,這部分的模板跟回調看起來會簡單點。
然後再看IOC,看IOC之前必須對spring IOC原理掌握的很透徹,怎麼擴展,怎麼寫膠水代碼整合其他框架。建議熟讀Spring-Reference。
然後再讀源碼,先學習怎麼寫出漂亮的代碼,再學習怎麼設計出漂亮的模式。
⑺ 怎麼去看框架源代碼
查看框架原代碼,你可以去下載源代碼的壓縮包,再把這個包放到你程序關聯的包上面。 forexample:如果你用的是eclipse的話,假設你工程裡面用到了spring-2.0.6.jar則你在這個jar上點擊右鍵,點屬性,這時在出來的上面有一個java source attachment,你選擇後面external file 把你從官網上下載的包關聯進來,就ok了,這樣你就可以從用到spring源碼的地方直接點進來看spring的源碼了,或者你直接點jar文件的目錄,一樣可以看spring的源碼。
⑻ Myeclipse下如何查看Spring等框架的源代碼
1.下載jad.exe與jadclipse_3.2.0.jar(本地址資源中心中提供);2.將jad.exe可以存放任意目錄,比如C:jad.exe;3.將jadclipse_3.2.0.jar放到${eclipse}/plugins目錄下,並解壓到當前目錄下,目錄為${eclipse}/plugins/jadclipse_3.2.0;4.打開Myeclipse進行分別設置:選項Windows--Preference--Java-JadClipse下設置Path to decompiler為:C:jad.exe選項Windows--Preference--General--Editor--File Associations下設置File types為*.class的默認打開格式為JadClipse Class File Viewer我是按上面步驟做的,(MyEclipse 6.5)卻什麼也出不來,是不是我的方法不對? 回答: 你上面的步驟是正確的。我在Myeclipse 5.5上用jadclipse_3.2.0.jar同樣的手順已經取到了源代碼。我覺得你用的jadclipse_3.2.0.jar 應該是和你的Eclipe版本不符,低了。我在Myeclipse 7.0 用net.sf.jadclipse_3.3.0.jar 取到了。若換成3.2.0 就不行,出ERROR。