Spring的IOC,是什么,他又做了什么?

Spring源码 IOC和循环依赖AOP

IOC篇

1、BeanFactory

IOC容器,以BeanFactory为载体。

BeanFactory,是Spring容器。这是由Spring管理,产生SpringBean生命周期的载体。

豆子的工厂,进厂打工,就得听工厂(Spring)的话。

与之相比较的是FacotryBean,就不是Spring管理,由道友们自己定义。FactoryBean,工厂豆子。

工厂的豆子,重点是豆子,所以自己做主。

BeanFactory 可以怎么用?

https://blog.csdn.net/China_eboy/article/details/115513512 (别人那里看到的)本人也没怎么用过。

image-20220412001219477

2、IOC 控制反转

以下是IOC的介绍。IOC英语,Inversion of Control, 反转 of 控制,直译,控制反转。

我理解,IOC是为了把一些配置类,一些服务类,能够解放出来,交给Spring管理。

其中包括了注册和使用。

@Service @Autowired类似。

将xml,json,yml各种格式,都交给Spring解析。

image-20220412000958487

其中IOC容器,经过增强器,实例化,具体经过两个过程,才会变成完整的对象。

3、Bean的实例化

实例化,大致有如下过程。

image-20220412001557631

需要经过实例化和初始化!!

属性赋值,不仅仅是自定义属性赋值,还有继承Aware接口的,将会赋予Spring容器内有的特定值。

属性赋值,完成对象。初始化!!详细如下图。

image-20220412001942974

这就是IOC,将bean交给IOC管理。

AOP,就是切面,如上图,用在了BeanPostProcessor 增强处理器,处理Bean上。

其中讲一个循环依赖的问题。

循环依赖和AOP篇

二级缓存就能够解决一般的循环依赖。

如上图,假设A,B两个Class互相引用。

public class A{
private B b;
}
public class B{
private A a;
}

这就是循环依赖。

但是加入了切面,AOP。二级缓存就不够用了。

三级缓存,是为了解决AOP。

AB循环依赖,时序图如下。

image-20220412010201109

先存

三级缓存 先存 A ,再存A的属性bbb,引用B对象。所以再存B。

获取B的对象A。

B:aaa,ref = A

A移入二级缓存,移除三级缓存。 找到了bean A.

deepCopy.add(new PropertyValue(pv, convertedValue));  
pv:"bean property 'aaa'"

image-20220411221026870

BeanName zyB,B class完成

applyPropertyValues(beanName, mbd, bw, pvs);

返回出来

addSingleton

放入一级缓存,移除二级缓存,移除三级缓存。

添加registerdSingleton.add(beanName)

继续跳出到,bean = B。
把bean property 

image-20220411221729900

addSingleton(7个了 A 和 B)

放入一级缓存,移除二级缓存,移除三级缓存。

添加registerdSingleton.add(beanName)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值