前言
最近系统的学习了一下spring的源码,准备简单仿写一下spring,目前是仿写ioc篇,在ioc篇中将完成整套的bean的生命周期,当然是简单的实现,不会像spring真正源码那样做非常系统性的校验以及接口设计。
预期目标
- 将所有带有@Component注解的类注册成bean
- 将@Bean的方法注册成bean
- 实现bean的生命周期,即创建,初始化以及销毁等操作
这里建议不了解bean的生命周期的小伙伴先来看一下博主的文章
【spring】spring bean的生命周期
项目结构
流程分析
- 启动项目,扫描目标路径下的所有带有@Component注解的java文件
- 扫描目标路径下的所有带有@Configuration注解中的@Bean注解标记的方法
- 遍历前两步得到的集合执行bean的生命周期
- 通过newInstance获取空实例
- 通过反射调用set方法
- 检查Aware接口并通过Aware调用
- 将bean交给BeanPostProcessor进行初始化
- 执行@PostConstruct
- 检查InitializingBean
- 从BeanPostProcessor获取bean并保存在BeanFactory中
- 关闭项目时销毁bean
开源地址
仿写spring-Gitee
后续更新
【仿写spring之ioc篇】二、bean生命周期中的创建以及属性赋值
【仿写spring之ioc篇】三、检查是否实现了Aware接口并且执行对应的方法
【仿写spring之ioc篇】四、实现bean的初始化阶段