NingG +

Spring 源码:概要

1. 概要

重走 Spring 之路,梳理源码和最佳实践:

此次主线:Java Web 框架,顺便梳理 Spring。从设计框架的角度,去学习框架。

场景:

  1. 框架的用途?满足哪些场景?
  2. 怎么写框架?
  3. 框架要支持哪些关键模块?事务?AOP?安全?与其他框架的对接?
  4. 潜在瓶颈?
  5. 一些常用的写法?开发过程中,常用的设计模式

2. 小组讨论

讨论形式:

3. 讨论

3.1. 第一次

分享内容:IoC及Spring IoC启动过程

具体:

  1. IoC 的目标:对象之间的依赖关系解耦
  2. 本质:工厂类 + 反射
  3. 不为每个类创建工厂类,因此,抽象工厂类
  4. IoC,控制反转,对象之间的依赖关系,从代码中剥离,交给 IoC 容器负责。
  5. Web 工程启动过程:main → jetty → Spring context
  6. IoC 原理本质上很简单,只是 Spring 优雅的设计,让代码变得晦涩,最简单粗暴的方式,分下面几步:
    1. 扫描所有 class ,生成 Class_Map,key为id,value 为 class 对象;
    2. 扫描 Class_Map,生成 Object_Map,key 为 id,value 为 class 对应的实例对象;
    3. 扫描 Object_Map,为每一个 Object 中的 field 绑定 Object;

疑问:

  1. @PostConstruct 注解的执行时间,在 Bean 生命周期中的位置。

下次安排:

3.2. 第二次

分享内容:Spring AOP

具体:

  1. Spring AOP 和 AspectJ 是 2 种具体的实现
  2. Spring AOP 中,直接使用 AspectJ 的注解,但具体动态代理机制用的是 SpringAOP 自己的机制
  3. 编织:
    1. 静态编织:编译阶段,java → class 字节码时,处理注解
    2. 动态代理:运行时阶段,根据 class 字节码,动态生成代理class
  4. 类加载:编译、加载、初始化、卸载
  5. 代理类的实现:继承方式、组合方式
    1. JDK 动态代理:组合
    2. CGLIB 字节码增强:继承
    3. 继承、组合方式的优劣?
  6. 拦截器链:JDK 动态代理中,采用拦截器链

疑问:

下次安排:

3.3. 第三次

Spring MVC

具体:

  1. Servlet与http关系,Servlet规范,web.xml规范规定要有
  2. Filter的重要性,本质上springmvc很多用到该技术
  3. web.xml配置,执行过程,按配置顺序
  4. DispatchServlet
  5. Controller与Servlet
  6. namespace对应注解的处理

疑问:

下次安排:

3.4. 第四次

分享内容:Spring Namespace XML、Spring MessageConverter

具体:

  1. Spring Namespace XML,namespace的处理逻辑、好处、场景、自定义
  2. Spring MessageConverter,Object到JSON转换

疑问:

  1. p命名空间,beans-p-namespace
  2. c命名空间,beans-c-namespace

下次安排:

3.5. 第五次

分析内容:Spring Boot揭秘

具体:

  1. Spring配置的一种发展趋势:JavaConfig
  2. SpringBoot的启动过程

疑问:

  1. Jetty和Tomcat都同时配置的话会如何选择启动?
  2. 是否会加载很多无用的class文件等,加重虚拟机的负载?
  3. 如果自己的一个项目,如何改造为能够被springboot自动加载?

下次安排:

3.6. 第六次

分析内容:Spring Task

具体:

  1. concurrent 包中:ThreadPoolExecutor 实现 Executor 接口
  2. corePoolSize:小于 corePoolSize 时,优先执行;
  3. workQueue:一旦运行线程达到 corePoolSize,就排队优先
  4. 如果队列排满,则新起线程,要求线程数小于:maximumPoolSize,如果已经达到 maximumPoolSize 则,开启独立处理策略(调用线程来执行、丢弃等);
  5. 定时任务:
    1. 实际是 workQueue(小顶堆),根据执行时间排序,每次取出一个任务,会判断是否为周期任务
  6. Timer:
    1. 执行时机:时间点?时间段?时间基准?
    2. 任务并发性:Timer 单线程
    3. 异常的影响:

下次安排:

3.7. 第七次

分析内容:Spring Transaction

具体:

下次安排:

3.8. 第八次

分享内容:Spring Cache

具体:

下次安排:

3.9. 第九次

分享内容:SpringTest

具体:

疑问:

下次安排:

3.10. 第十次

分析内容:Spring Validation, Data binding, and Type Conversion

具体:

  1. data binding目标、简介、机制、过程
  2. Type Conversion,本质都是:String → Java Object
  3. 枚举的处理,先ordinal,再name
  4. Formatter
  5. 数据校验,注解、标签、规则
  6. 异常转换,三种
  7. 配置
  8. 三者相互独立、没有依赖

下次安排:

4. 参考资料

  1. Spring 3.x 企业应用开发
  2. Spring 揭秘
  3. 《架构探险:Java Web 框架》黄勇
  4. 《Spring 实战 (第 4 版)》
  5. 开涛-Spring 系列
  6. Spring 系列
Top