源碼閱讀與定制化
SpringFramework
,Acegi(SpringSecurity)
你弦,Tomcat
考传,SpringBoot
,SpringCloud(部分)
, Jetty
旁涤,Velocity
翔曲,MyBatis/Generator
,Quercus(PHP in Java)
劈愚,Guava
,Android(UI部分)
源碼閱讀的目的
- 分析與解決 BUG(Quercus)
- 尋找隱藏的交互方式(Spring)
- 彌補(bǔ)文檔的不完善性(非著名項(xiàng)目)
- 擴(kuò)展與定制(Velocity闻妓,MyBatis/Generator等)
- 安全性檢查(Quercus)
- 學(xué)習(xí)(Spring, Tomcat, Android-UI)
- 工作需要(Dubbo3維護(hù))
源碼閱讀的方式
- 確定目標(biāo)對(duì)象(建立自信 OR 被打擊自信)
- 從使用開(kāi)始
- 分析主脈絡(luò)
- 分步調(diào)試
- 從抽象到具體
- 從易到難(Jetty -> Tomcat)
定制化
-
Ali-Tomcat
對(duì) Tomcat 的增強(qiáng)菌羽,比如對(duì)于ClasaLoader并行加載的補(bǔ)丁
ClassLoader.registerAsParallelCapable
,并合入Tomcat7.0.65由缆。另外就是對(duì)于HSF(High-Speed Service Framework)的支持注祖。 Ali-JVM
PHP Support in Java
更全面的代碼生成器
SpringBoot之兼容Velocity
權(quán)限平臺(tái)的Boot化
收獲
Tomcat -> 容器組件構(gòu)架模型,生命周期管理與事件處理模型均唉,以及 Pipeline 模型
Quercus, Binlog -> 協(xié)議的理解與實(shí)現(xiàn)
Android -> 分而治之與事件管理
Spring全家桶 -> 幾乎囊括了所有的設(shè)計(jì)模式和架構(gòu)模型
Tomcat 生命周期管理
start()
-----------------------------
| |
| init() |
NEW -?-- INITIALIZING |
| | | | ------------------?-----------------------
| | |auto | | |
| | \|/ start() \|/ \|/ auto auto stop() |
| | INITIALIZED --?-- STARTING_PREP --?- STARTING --?- STARTED --?--- |
| | | | |
| |destroy()| | |
| --?-----?-- ------------------------?-------------------------------- ^
| | | |
| | \|/ auto auto start() |
| | STOPPING_PREP ----?---- STOPPING ------?----- STOPPED -----?-----
| \|/ ^ | ^
| | stop() | | |
| | -------------------------- | |
| | | | |
| | | destroy() destroy() | |
| | FAILED ----?------ DESTROYING ---?----------------- |
| | ^ | |
| | destroy() | |auto |
| --------?----------------- \|/ |
| DESTROYED |
| |
| stop() |
----?-----------------------------?------------------------------