手写简易Spring框架

b站图灵学院up周瑜手写简易Spring课程笔记
Spring系列文章 (yuque.com)
相关视频:2022吃透这些Java手写(Spring、Tomcat、Dubbo、JVM、Hashmap、Mybatis、Springmvc)框架源码,看完吊打面试官!_哔哩哔哩_bilibili
视频配套代码https://gitee.com/archguide/zhouyu-spring.git

总览

手写spring课程大概分为以下几步

手写Spring启动以及扫描流程
手写getBean()流程
手写Bean生命周期流程
手写依赖注入流程
手写BeanPostProcessor
机制手写Aop机制

bean的生命周期简易流程图

UserService.class —> 无参构造方法 —>普通对象—>依赖注入(属性赋值、BeanNameAware接口、BeanClassLoaderAware接口、BeanFactoryAware接口)—>初始化前(postconstruct)—>初始化(initializingBean)—>初始化后(aop)—>代理对象—>Bean
在这里插入图片描述

获取容器和bean

在这里插入图片描述
在这里插入图片描述

0.启动和扫描逻辑实现

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

整体流程图

在这里插入图片描述

启动类:首先,获取容器,通过构造方法传入配置类

在这里插入图片描述

配置类上的注解,通过注解获取要扫描的包,扫描包里面含有@conmonent注解的bean,将bean的信息放入BeanDefinition

在这里插入图片描述
在这里插入图片描述

扫描流程:扫描bean,解析bean,将bean信息设置到BeanDefinition当中,放入beanDefinitionMap当中。

在这里插入图片描述

如果是单例bean创建后就放入单例池。调用getbean()方法时直接从单例池获取,原型bean的话就直接创建一个bean

在这里插入图片描述

依赖注入

依赖注入的逻辑是判断bean上的字段是否存在@autowired注解,如果存在就获取bean并给属性注入。

Aware回调

回调主要是判断bean是否实现了BeanNameAware,BeanFactoryAware等各种接口,类似于按接口判断还有哪些属性需要注入。来实现对bean的扩展
在这里插入图片描述

初始化

初始化和之前Aware回调差不多,判断bean是否实现InitializingBean()接口,然后重写当中的afterPropertiesSet()方法。
初始化有三种方法

对于Spring Bean 的初始化归纳了下,主要可以归纳一下三种方式
@PostConstruct 标注方法
自定义初始化方法
实现 initializingBean 接口的afterPropertiesSet()方法

BeanPostProcessor

这个接口是后置处理器接口,可分为before,after。与前面的Aware也差不多。
在这里插入图片描述

AOP

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

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值