Spring IOC 的原理和实现

spring IOC 概述

控制翻转:spring之前对象是由使用者来进行控制的,有了spring之后,可以把整个对象交给spring来帮我们进行管理。其中IOC中涉及DI::依赖注入,把对应的属性的值注入到具体的对象中@autowired,populateBean完成属性值的注入。
容器:是存储对象的容器,使用map结构存储,在spring中一般存在三级缓存,singletonobjects存放完整的bean对象。
整个bean的生命周期,从创建到使用到销毁的过程全部都是由容器来管理的(bean的生命周期)。
IOC的详细处理过程
1.IOC容器的时候要涉及到容器的创建过程,首先创建bean工厂(根接口:beanfactory,常用的基本实现是:defaultlistableBeanFactory),然后向bean工厂中设置一些参数(BeanPostProcessor,Aware接口的子类)等等属性。
2.加载解析bean对象,准备要创建的bean对象的定义对象beandefinition(xml或者注解的解析过程)
3.beanFactoryPostProcessor的处理,此处是扩展点,其中placeholderConfigurationClassPostProcessor,configurationClassPostProcessor这两个类完成基本的设置功能。
4.beanPostProcessor的注册功能,方便后继对bean对象完乘具体的扩展功能。
5.通过反射的方式将beanDefiniton对象实例化成具体的bean对象。
6.bean对象的初始化过程(填充属性,调佣aware子类的方法,调佣beanPostProcessor前置处理方法,调佣init-mehtod方法,调用BeanPostProcessor的后置方法)
7.生成完整的bean对象,通过getBean方法可以直接获取对象。
8.销毁过程。

整体的流程图

在这里插入图片描述

bean的生命周期在这里插入图片描述

1)实例化bean,反射的方式生成对象
2)填充bean对象属性:populateBean(),循环依赖的问题(三级缓存)
3)调用aware接口相关的方法:invokeAwareMethod(完成beanName,beanFactory,BeanClassLoader对象的属性设置)
4)调用beanPostProcessor中的前置处理方法:使用比较多的有(ApplicationContextPostProcessor,设置applicationContext,Environment,Resourceloader,EmbeddValueResolver等对象)
5)调用initmethod方法:invokeInitmethod(),判断是否实现了initializingBean接口,如果有调用afterPropertiesSet方法,没有就不调用。
6)调用BeanPostProcessor的后置处理方法:spring的aop就是在此处实现的,abstractAutoProxyCreator注册Destuction相关的接口。
7)获取到完整的对象,可以通过getBean的方式来进行对象的获取。
8)销毁流程,1判断是否实现了dispoablebean接口,2,调用destroyMethod方法。

写在最后:有帮助欢迎点赞,有问题留言沟通,谢谢!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

密度比例

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值