简易的Spring,支持IoC功能

- 支持XML
<Bean>
标签配置 - 支持
@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-spring了解Spring的核心原理,而不至于从一开始就被循环依赖、类型转换这些繁琐的细节所累。
先掌握核心思想,再逐步向外扩展,后续的内容学习起来才会得心应手。
所以,目前的dummy-spring难度刚刚好。
未来可能会另起一个项目,在dummy-spring的基础上支持循环依赖、FactoryBean 、AOP 以及类型转换。
Spring的源码涉及多种经典的设计模式 ,大家在看源码的过程中遇到不懂的设计模式,可以对照着学一下。
学习方式
- 先把测试案例都跑一遍,沿着测试案例的思路,debug一下。边看边画图是一种很好的学习方式
- 完全理解dummy-spring后,可以看看mini-spring和tiny-spring,它们为每个阶段都创建了独立分支,能看到演化过程
- 可以试着简化mini-spring(拆房子必须了解骨架结构,可以验证你是否真的理解Spring)