今天抽空讀了下hibernate源碼,總結了幾條讀源碼的經驗,而且認識了hibernate的部分源碼結構。sql
首先,拿到一個框架,要先了解其基本功能,通讀(略讀)其API。
而後,經過其主要代碼或其在項目中的常應用的類爲入口,進行追蹤。看看其實如何實現本功能的。同時,可在網上查找相關
文檔,瞭解其基本架構。
在對其經常使用功能的實現有必定認識之後,而後通視源碼,主要先從其工具類或實體類開始(由於易於理解,而且不像其餘邏輯相關的類同樣較爲複雜)。
在閱讀邏輯相關的類時,不只要'見文知意',還要仔細閱讀註釋,若是有Log日誌輸出,還能夠藉助日誌輸出字符來理解(在應用中還能夠藉助控制檯日誌打印信息來追蹤程序執行過程)。沿着某項功能的實現爲主線,跳躍式閱讀。
最後,查缺補漏,找出還未閱讀的代碼(如不想深刻研究,就沒必要了)。數據庫
**在此發現了'解耦'的好處,不用把整個框架設計爲一體,所有互相依賴,好比Hibernate裏的一些工具類(如StringHelper類),這樣在修改重構時會減小代碼量。架構
今天只讀了configuration類和相關的部分類元源碼。
其中configuration類是Hibernate運行時的第一個類,他負責解析hibernate.cfg.xml,並做完成框架的初始化工做。app
下面是引用網上關於Hibernate各包的簡介。框架
1. org.hibernate :該包的類基本上都是接口類和異常類ide
2. org.hibernate.cache.* :cache的實現類工具
3. org.hibernate.cfg.* :配置文件讀取類 測試
4. org.hibernate.collection.* :Hibernate集合接口實現類:例如List(PersistentList),Set(PersistentSet), Bag(PersistentBag)等等,Hibernate之因此要自行編寫集合接口實現類是爲了支持延遲加載。hibernate
5. org.hibernate.connection.* :幾個數據庫鏈接池的Provider 設計
6. org.hibernate.dialect.* :支持多種數據庫特性,每一個Dialect實現類表明一種數據庫,描述了該數據庫支持的數據類型和其它特色,例如是否有AutoIncrement,是否有Sequence,是否有分頁sql等等
7. org.hibernate.eg.* :Hibernate文檔中用到的例子
8. org.hibernate.engine.* :這個包的類做用比較散
9. org.hibernate.hql.* :HQL的實現org.hibernate.id.* :ID生成器
10. orghibernate.impl.* :最核心的包,一些重要接口的實現類,若是Session,SessionFactory,Query等
11. org.hibernate.jca.* :JCA支持,把Session包裝爲支持JCA的接口實現類
12. org.hibernate.jmx.* :jmx的實現
13. org.hibernate.loader.* :也是很核心的包,主要是生成sql語句的
14. org..hibernate.lob.* :Blob和Clob支持
15. org.hibernate.mapping.* :hbm文件的屬性實現
16. org.hibernate.metadata.*:PO的Meta實現
17. org.hibernate.odmg.*:ODMG是一個ORM標準,這個包是ODMG標準的實現類
18. org.hibernate.persister.*:核心包,實現持久對象和表之間的映射
19. org.hibernate.proxy.*:Proxy和Lazy Loading支持
20. org.hibernate.ps.*:該包是PreparedStatment Cache
21. org.hibernate.sql.*:生成JDBC sql語句的包
22. org.hibernate.test.*:測試類,你能夠用junit來測試Hibernate
23. org.hibernate.tool.hbm2ddl.*:用hbm配置文件生成DDL
24. org.hibernate.transaction.*:Hibernate Transaction實現類
25. org.hibernate.type.*:Hibernate中定義的持久對象的屬性的數據類型
26. org.hibernate.util.*:一些工具類,做用比較散
27. org.hibernate.xml.*:XML數據綁定