手写简化版Spring框架

  • 以理科思维理解为目的的方式去学习,而不是死记硬背
  • 剥丝抽茧,体现核心,把最直接相干的内容体现出来进行学习,才更容易理解 Spring 源码
  • 对于一个知识的学习来说,写代码只是最后的步骤,往往整个思路、设计、方案,才更重要

01 章 开篇介绍

  • 目标
    摘取整体框架中的核心逻辑,简化代码实现过程,保留核心功能,例如:IOC、AOP、Bean生命周期、上下文、作用域、资源处理等内容实现
  • 源码地址
    https://github.com/fuzhengwei/small-spring

02 章:创建简单的 Bean 容器(容器篇)

  • Spring Bean 容器: 用于定义、存放和获取 Bean 对象

  • 设计:
    手写简化版Spring框架_第1张图片

  1. 定义:BeanDefinition,现在只定义Object类型用于存放对象
  2. 注册: 数据存放到 HashMap 中,只不过现在 HashMap 存放的是定义了的 Bean 的对象信息
  3. 获取: 最后获取对象,Bean 的名字就是 key, Spring 容器初始化好 Bean 后,直接获取即可
  • 实现
    1. 工程结构
      手写简化版Spring框架_第2张图片

    2. Spring Bean 容器类关系
      手写简化版Spring框架_第3张图片

      BeanDefinition: 用于定义 Bean 实例化信息
      BeanFactory: 代表 Bean 对象的工厂,存放 Bean 定义 到 map 中以及获取

03章: 运用设计模式,实现 Bean 的定义、注册、获取(容器篇)

  • Bean 的创建交给容器,而不是调用的时候传递一个实例化好的Bean对象
  • 考虑 单例模式,在对象的二次获取时,可以从内存中获取对象
  • 完善基础容器框架的类结构体,方便将来其他功能的扩容

设计

  • Bean 注册的时候只注册一个类信息,而不会直接把实例化信息注册到 Spring 容器中,需要修改 BeanDefinition 中的属性 Object 为 Class
  • 获取 Bean 对象时需要处理 Bean 对象的实例化操作以及判断当前单例对象在容器中是否已经缓存起来
  • BeanFactory 接口,提供获取 Bean 的方法 getBean(String name) 接口由AbstractBeanFactory 实现-------模板模式
  • AbstractAutowireCapableBeanFactory抽象类继承AbstractBeanFactory 抽象方法------AbstractAutowireCapableBeanFactory 本身也是一个抽象类,所以它只会实现属于自己的抽象方法,其他抽象方法由继承 AbstractAutowireCapableBeanFactory 的类实现
  • 单例 SingletonBeanRegistry 的接口定义实现,而 DefaultSingletonBeanRegistry 对接口实现后,会被抽象类 AbstractBeanFactory 继承

你可能感兴趣的:(手写简化版,Spring,框架,spring,java,mybatis)