源码阅读经历

源码阅读与定制化

SpringFrameworkAcegi(SpringSecurity)TomcatSpringBootSpringCloud(部分), JettyVelocityMyBatis/GeneratorQuercus(PHP in Java)GuavaAndroid(UI部分)

源码阅读的目的

  1. 分析与解决 BUG(Quercus)
  2. 寻找隐藏的交互方式(Spring)
  3. 弥补文档的不完善性(非著名项目)
  4. 扩展与定制(Velocity,MyBatis/Generator等)
  5. 安全性检查(Quercus)
  6. 学习(Spring, Tomcat, Android-UI)
  7. 工作需要(Dubbo3维护)

源码阅读的方式

  1. 确定目标对象(建立自信 OR 被打击自信)
  2. 从使用开始
  3. 分析主脉络
  4. 分步调试
  5. 从抽象到具体
  6. 从易到难(Jetty -> Tomcat)

定制化

  1. Ali-Tomcat

    对 Tomcat 的增强,比如对于ClasaLoader并行加载的补丁ClassLoader.registerAsParallelCapable,并合入Tomcat7.0.65。另外就是对于HSF(High-Speed Service Framework)的支持。

  2. Ali-JVM

  3. PHP Support in Java

  4. 更全面的代码生成器

  5. SpringBoot之兼容Velocity

  6. 权限平台的Boot化

收获

Tomcat -> 容器组件构架模型,生命周期管理与事件处理模型,以及 Pipeline 模型

Quercus, Binlog -> 协议的理解与实现

Android -> 分而治之与事件管理

Spring全家桶 -> 几乎囊括了所有的设计模式和架构模型

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()                             |
 ----»-----------------------------»------------------------------

你可能感兴趣的:(源码阅读经历)