b站图灵学院up周瑜手写简易Spring课程笔记
Spring系列文章 (yuque.com)
相关视频:2022吃透这些Java手写(Spring、Tomcat、Dubbo、JVM、Hashmap、Mybatis、Springmvc)框架源码,看完吊打面试官!_哔哩哔哩_bilibili
视频配套代码https://gitee.com/archguide/zhouyu-spring.git
手写Spring启动以及扫描流程
手写getBean()流程
手写Bean生命周期流程
手写依赖注入流程
手写BeanPostProcessor
机制手写Aop机制
UserService.class —> 无参构造方法 —>普通对象—>依赖注入(属性赋值、BeanNameAware接口、BeanClassLoaderAware接口、BeanFactoryAware接口)—>初始化前(postconstruct)—>初始化(initializingBean)—>初始化后(aop)—>代理对象—>Bean



整体逻辑:扫描bean,解析bean,将bean信息设置到BeanDefinition当中,放入beanDefinitionMap当中如果是单例bean创建后就放入单例池。调用getbean()方法时直接从单例池获取,原型bean的话就直接创建一个bean






依赖注入的逻辑是判断bean上的字段是否存在@autowired注解,如果存在就获取bean并给属性注入。
回调主要是判断bean是否实现了BeanNameAware,BeanFactoryAware等各种接口,类似于按接口判断还有哪些属性需要注入。来实现对bean的扩展

初始化和之前Aware回调差不多,判断bean是否实现InitializingBean()接口,然后重写当中的afterPropertiesSet()方法。
初始化有三种方法
对于Spring Bean 的初始化归纳了下,主要可以归纳一下三种方式
@PostConstruct 标注方法
自定义初始化方法
实现 initializingBean 接口的afterPropertiesSet()方法
这个接口是后置处理器接口,可分为before,after。与前面的Aware也差不多。

AOP就是基于BeanPostProcessor实现,将代理bean放入单例池。