# dummy-ioc **Repository Path**: zero0411/dummy-ioc ## Basic Information - **Project Name**: dummy-ioc - **Description**: 简易的IoC,适合初学者用于研究Spring IoC源码 - **Primary Language**: Unknown - **License**: GPL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 12 - **Created**: 2025-01-09 - **Last Updated**: 2025-01-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 简易的IoC容器 图片名称 - 支持XML``标签配置 - 支持`@Component`扫描 - 支持autowire(byName) - 支持`@Autowired`、`@Value`注入 - 支持`InitializingBean`/`DisposableBean`/`init-method`/`destroy-method`等生命周期钩子方法 - 支持`BeanFactoryPostProcessor`、`BeanPostProcessor`扩展 - 支持`Aware`注入(`BeanFactoryAware`、`ApplicationContextAware`) - 支持Spring事件发布机制 - 支持`ClassPathXmlApplicationContext` 图片名称
图片名称
图片名称
图片名称
## 说明 为了保证代码的简洁性,一些功能被有意地简化或忽略,比如 - 极大简化`BeanFactory`及`ApplicationContext`的继承体系 - 省略`BeanDefinition`的继承、`BeanDefinition`的合并、`BeanDefinition`的缓存 - 不支持循环依赖 - 不支持`FactoryBean` - 不支持类型转换(Bean只能使用String类型的属性) - 不支持AOP、AspectJ 我希望每个初学者都能通过dummy-ioc了解Spring的核心原理,而不至于从一开始就被循环依赖、类型转换这些繁琐的细节所累。 先掌握核心思想,再逐步向外扩展,后续的内容学习起来才会得心应手。 所以,**目前的dummy-ioc难度刚刚好**。 未来可能会另起一个项目,在dummy-ioc的基础上支持循环依赖、[FactoryBean](https://www.yuque.com/bravo1988/design-pattern/kymtng91m0zkbxxz?singleDoc) 、[AOP](https://www.zhihu.com/question/484672089/answer/3410577723) 以及类型转换。 Spring的源码涉及多种经典的[设计模式](https://gitee.com/bravo1988/design-pattern) ,大家在看源码的过程中遇到不懂的设计模式,可以对照着学一下。 ## 学习方式 - 先把测试案例都跑一遍,沿着测试案例的思路,debug一下。边看边画图是一种很好的学习方式 - 完全理解dummy-ioc后,可以看看mini-spring和tiny-spring,它们为每个阶段都创建了独立分支,能看到演化过程 - 可以试着简化mini-spring(拆房子必须了解骨架结构,可以验证你是否真的理解Spring) - 推荐大家有空了解一下设计模式,对学习框架和日常编码都大有裨益:[设计模式那些事儿](https://gitee.com/bravo1988/design-pattern) ## 参考 - [mini-spring](https://github.com/DerekYRC/mini-spring) - [tiny-spring](https://github.com/code4craft/tiny-spring) - [设计模式那些事儿](https://gitee.com/bravo1988/design-pattern)