手写 Spring IoC 模块设计

Spring IoC 模块面向对象设计

1. 设计概述

基于Spring IoC容器的核心机制,主要涉及Bean的定义、加载、解析、注册以及实例化等关键步骤,采用面向对象设计(OOD)来实现各个组件的协作关系。


2. 主要模块及其职责

BeanDefinition 加载模块

该模块负责从XML资源文件中解析并加载Bean定义。

主要流程

  1. 定位并加载XML资源文件
  2. 创建Document文档对象
  3. 解析Document文档
  4. 解析Document中的Bean标签
  5. 注册BeanDefinition

相关类

  • BeanDefinition

    • beanName: String
    • className: String
    • classType: Class
    • scope: String
    • initMethod: String
    • propertyValues: List<PropertyValue>
  • PropertyValue

    • name: String
    • value: Object
  • TypedStringValue

    • value: String
    • targetType: Class
  • RuntimeBeanReference

    • ref: String

BeanDefinition 加载模块


Bean 实例创建模块

该模块负责根据BeanDefinition创建Bean实例,并进行依赖注入和初始化。

主要流程

  1. 从实例Bean集合中获取Bean
  2. 如果Bean已存在,则直接返回
  3. 如果Bean不存在,根据BeanDefinition创建实例
  4. 判断Bean是否为单例
  5. 创建Bean的实例
  6. 进行依赖注入
  7. 调用初始化方法
  8. 将Bean存入集合

3. 资源解析模块

该模块负责解析XML或其他资源文件,并生成可供IoC容器使用的Document对象。

资源解析模块

相关类

  • Resource

    • + getInputStream(): InputStream
  • ClasspathResource

    • location: String
    • + getInputStream(): InputStream
  • UrlResource

    • location: String
    • + getInputStream(): InputStream
  • DocumentUtils

    • + createDocument(InputStream is): Document
  • BeanDefinitionDocumentReader

    • + loadBeanDefinitions(Element e): void
  • BeanDefinitionParser

    • + parseElement(Element bean): void

4. BeanFactory 模块

该模块是IoC容器的核心,负责管理Bean的注册、获取和生命周期管理。

BeanFactory 模块

相关类

  • BeanFactory

    • + getBean(String beanName): Object
  • ListableBeanFactory

    • + getBeansByType(Class clazz): List<Object>
  • AbstractBeanFactory

    • + getBean(String beanName): Object
  • DefaultListableBeanFactory

    • beanDefinitions: Map<String, BeanDefinition>
    • + getBean(String beanName): Object
  • SingletonBeanRegistry

    • singletonObjects: Map<String, Object>
    • + addSingleton(String beanName, Object bean): void
    • + getSingleton(String beanName): Object
  • BeanDefinitionRegistry

    • + registerBeanDefinition(String beanName, BeanDefinition bd): void
    • + getBeanDefinition(String beanName): BeanDefinition
    • + getBeanDefinitions(): List<BeanDefinition>

5. 设计特点

  • 基于面向对象设计(OOD),使用抽象类和接口进行分层设计,符合Spring的依赖倒置原则(DIP)。
  • 采用工厂模式(Factory Pattern),通过BeanFactory实现IoC容器。
  • 支持单例模式(Singleton Pattern),使用SingletonBeanRegistry管理单例对象。
  • 模块解耦,不同模块各司其职,提高可维护性和扩展性。