源码阅读与定制化

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)

源码阅读的方式

  1. 确定目标对象(建立自信 OR 被打击自信)
  2. 分析主脉络
  3. 分步调试
  4. 从抽象到具体

定制化

  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 生命周期管理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
           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() |
----»-----------------------------»------------------------------

Java编译模型