# 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)