手写 Spring IoC 模块设计

手写 Spring IoC 模块设计
penjcSpring IoC 模块面向对象设计
1. 设计概述
基于Spring IoC容器的核心机制,主要涉及Bean的定义、加载、解析、注册以及实例化等关键步骤,采用面向对象设计(OOD)来实现各个组件的协作关系。
2. 主要模块及其职责
BeanDefinition 加载模块
该模块负责从XML资源文件中解析并加载Bean定义。
主要流程
- 定位并加载XML资源文件
- 创建Document文档对象
- 解析Document文档
- 解析Document中的Bean标签
- 注册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
Bean 实例创建模块
该模块负责根据BeanDefinition创建Bean实例,并进行依赖注入和初始化。
主要流程
- 从实例Bean集合中获取Bean
- 如果Bean已存在,则直接返回
- 如果Bean不存在,根据BeanDefinition创建实例
- 判断Bean是否为单例
- 创建Bean的实例
- 进行依赖注入
- 调用初始化方法
- 将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
+ 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
管理单例对象。 - 模块解耦,不同模块各司其职,提高可维护性和扩展性。
评论
匿名评论
✅ 你无需删除空行,直接评论以获取最佳展示效果