手搓了一个Spring,这次一定搞懂IoC容器!

简易的Spring,支持IoC功能

  • 支持XML<Bean>标签配置
  • 支持@Component扫描
  • 支持autowire(byName)
  • 支持@Autowired@Value注入
  • 支持InitializingBean/DisposableBean/init-method/destroy-method等生命周期钩子方法
  • 支持BeanFactoryPostProcessorBeanPostProcessor扩展
  • 支持Aware注入(BeanFactoryAwareApplicationContextAware
  • 支持Spring事件发布机制
  • 支持ClassPathXmlApplicationContext




说明

为了保证代码的简洁性,一些功能被有意地简化或忽略,比如

  • 极大简化BeanFactoryApplicationContext的继承体系
  • 省略BeanDefinition的继承、BeanDefinition的合并、BeanDefinition的缓存
  • 不支持循环依赖
  • 不支持FactoryBean
  • 不支持类型转换(Bean只能使用String类型的属性)
  • 不支持AOP、AspectJ

我希望每个初学者都能通过dummy-spring了解Spring的核心原理,而不至于从一开始就被循环依赖、类型转换这些繁琐的细节所累。

先掌握核心思想,再逐步向外扩展,后续的内容学习起来才会得心应手。

所以,目前的dummy-spring难度刚刚好

未来可能会另起一个项目,在dummy-spring的基础上支持循环依赖、FactoryBeanAOP 以及类型转换。

Spring的源码涉及多种经典的设计模式 ,大家在看源码的过程中遇到不懂的设计模式,可以对照着学一下。

学习方式

  • 先把测试案例都跑一遍,沿着测试案例的思路,debug一下。边看边画图是一种很好的学习方式
  • 完全理解dummy-spring后,可以看看mini-spring和tiny-spring,它们为每个阶段都创建了独立分支,能看到演化过程
  • 可以试着简化mini-spring(拆房子必须了解骨架结构,可以验证你是否真的理解Spring)

参考

相关推荐
菠萝崽.1 小时前
RabbitMQ高级篇-MQ的可靠性
java·分布式·后端·消息队列·rabbitmq·异步编程
沛沛老爹3 小时前
软件架构风格系列(6):解释器架构
spring·架构风格·架构入门·解释器架构
沛沛老爹3 小时前
软件架构风格系列(7):闭环控制架构
spring·工业4.0·温度控制·架构风格·架构入门·闭环控制架构
录大大i4 小时前
spring中yml配置上下文与tomcat等外部容器不一致问题
spring·tomcat
键盘客5 小时前
Spring Boot 配置明文密码加密,防泄漏
java·spring boot·后端·spring
程序员爱钓鱼6 小时前
defer关键字:延迟调用机制-《Go语言实战指南》
开发语言·后端·golang
集成显卡7 小时前
网页 H5 微应用接入钉钉自动登录
前端·后端·钉钉
fashia8 小时前
Java转Go日记(三十九):Gorm查询
开发语言·后端·golang·go
Kookoos9 小时前
使用 ABP vNext 集成 MinIO 构建高可用 BLOB 存储服务
后端·c#·.net·.netcore·minio·blob
蒂法就是我10 小时前
Spring的后置处理器是干什么用的?扩展点又是什么?
java·后端·spring