手写Spring渐进式源码实践

文章目录

  • 0 引言
  • 2 基于模板模式实现对象定义、注册和获取
    • 2.1 设计思路
    • 2.2 类图
    • 2.3 实现
    • 2.4 疑问和反思
  • 3 基于策略模式实现含构造函数的类实例化
    • 3.1 设计思路
    • 3.2 类图
  • 4 注入属性和依赖对象
    • 4.1 设计思路
  • 5 将资源文件中定义的对象注册到容器中
    • 5.1 设计思路
    • 5.2 类图
  • 6 实现ApplicationContext
    • 6.1 设计思路
    • 6.2 类图
  • 7 Bean对象的初始化和销毁
    • 6.1 设计思路
    • 6.2 类图

0 引言

这个是《手写Spring渐进式源码实践》书籍的读书笔记。

2 基于模板模式实现对象定义、注册和获取

2.1 设计思路

使用模板模式,统一使用核心方法的调用逻辑和标准定义,进而可以很好地实现后续步骤而不用关心某一方法的调用逻辑。按照统一方式执行,类的继承者只需要关心具体方法如何实现即可。

2.2 类图

手写Spring渐进式源码实践_第1张图片

2.3 实现

手写Spring渐进式源码实践_第2张图片
https://github.com/kaikai-sk/book-small-spring.git/

2.4 疑问和反思

  1. 模板模式的使用
    以前的使用方法. 就是单纯的继承实现。
BaseClass {
	pubic void mianProcess() {
		process1();
		process2();
		process3();
	}
}

Class A extends BaseClass {
	pubic process2() {
	}
}

Class B extends BaseClass {
	pubic process2() {
	}
}
  1. 为什么是先AbstractAutowireCapableBeanFactory提供createBean的能力
    正常理解应该是按照业务流程的顺序,子类1先去实现获取beanDeinition的功能,然后子类2去实现createBean的能力。这样就跟主流程符合。
  2. BeanDefinition getBeanDefinition(String name);为什么没有直接定义到接口里面去呢?感觉也是可以的。

3 基于策略模式实现含构造函数的类实例化

3.1 设计思路

不能简单的直接使用newInstance来进行类型实例化。要处理带参数的构造函数的情况。 创建类实例有多种技术手段,例如JDK本身的能力和cglib。可以通过策略模式来进行组织。

3.2 类图

手写Spring渐进式源码实践_第3张图片

4 注入属性和依赖对象

4.1 设计思路

表示引用类型的属性。
public class BeanReference {

    private final String beanName;

    public BeanReference(String beanName) {
        this.beanName = beanName;
    }

    public String getBeanName() {
        return beanName;
    }

}
基本类型的属性。
public class PropertyValue {

    /** 属性名称 */
    private final String name;

    /** 属性值 */
    private final Object value;
对象数组的表示
public class PropertyValues {
    private final List propertyValueList = new ArrayList<>();
}

5 将资源文件中定义的对象注册到容器中

5.1 设计思路

Resource和ResourceLoader实现对资源的加载。BeanDefinitionReader实现的是对资源的解析,将文件中定义的bean注入到容器中。

5.2 类图

手写Spring渐进式源码实践_第4张图片

6 实现ApplicationContext

6.1 设计思路

将资源管理和Bean管理的功能进行整合,全部整合到ApplicationContext中。通过context的封装,可以提升整个系统的易用性。

6.2 类图

  1. Bean管理能力的抽象层次
    手写Spring渐进式源码实践_第5张图片
  2. ApplicationContext的设计思路
    手写Spring渐进式源码实践_第6张图片

7 Bean对象的初始化和销毁

6.1 设计思路

开方接口供用户自定义对象的初始化方法和对象销毁前调用的方法。

6.2 类图

  1. Bean管理中的对象初始化和销毁
    手写Spring渐进式源码实践_第7张图片

  2. ApplicationContext中初始化和销毁
    手写Spring渐进式源码实践_第8张图片

你可能感兴趣的:(Spring全家桶之路,spring,java,后端)