|
|
|
@ -1,4 +1,4 @@
|
|
|
|
|
## 循环依赖
|
|
|
|
|
# 循环依赖
|
|
|
|
|
|
|
|
|
|
一个对象依赖对象闭环到自己
|
|
|
|
|
|
|
|
|
@ -10,9 +10,7 @@ tip:
|
|
|
|
|
|
|
|
|
|
解决方法:当一个对象已经实例化完毕了,还未初始化的时候,将它注入到它所依赖的已经实例好的对象(提前暴露对象),使得它所依赖的对象是个完整对象(实例化+初始化),然后再将这个完整对象注入给它。
|
|
|
|
|
|
|
|
|
|
<hr/>
|
|
|
|
|
|
|
|
|
|
### 简单工程(Spring-version-5.3.18)
|
|
|
|
|
## 简单工程(Spring-version-5.3.18)
|
|
|
|
|
|
|
|
|
|
我们就用下面两个类进行实践,多个类间依赖也是如此。
|
|
|
|
|
|
|
|
|
@ -80,7 +78,7 @@ private final Map<String, Object> earlySingletonObjects = new ConcurrentHashMap<
|
|
|
|
|
|
|
|
|
|
doCreateBean 这个方法
|
|
|
|
|
|
|
|
|
|
> 可以参照[createBeanInstance](https://github.com/yang520-bye/source-code-hunter/blob/main/docs/Spring/clazz/Spring-beanFactory.md#createbeaninstance)查看Spring是怎么实例化的
|
|
|
|
|
> 可以参照 [createBeanInstance](/docs/Spring/clazz/Spring-beanFactory.md#createbeaninstance) 查看 Spring 是怎么实例化的
|
|
|
|
|
|
|
|
|
|
```java
|
|
|
|
|
protected Object doCreateBean(String beanName, RootBeanDefinition mbd, @Nullable Object[] args)
|
|
|
|
@ -154,7 +152,7 @@ protected Object getEarlyBeanReference(String beanName, RootBeanDefinition mbd,
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
populateBean中有调用了applyPropertyValues这个方法具体详情请点击这里[applyProertyValues](https://github.com/doocs/source-code-hunter/blob/main/docs/Spring/clazz/Spring-beanFactory.md#applypropertyvalues)
|
|
|
|
|
populateBean 中有调用了 applyPropertyValues 这个方法具体详情请点击这里 [applyProertyValues](/docs/Spring/clazz/Spring-beanFactory.md#applypropertyvalues)
|
|
|
|
|
|
|
|
|
|
```java
|
|
|
|
|
protected void applyPropertyValues(String beanName, BeanDefinition mbd, BeanWrapper bw, PropertyValues pvs) {
|
|
|
|
@ -263,11 +261,8 @@ protected Object getSingleton(String beanName, boolean allowEarlyReference) {
|
|
|
|
|
|
|
|
|
|
最后经历这个就获取到一个半成品对象所依赖的一个完整对象,然后再将完整对象注入半成品对象中。
|
|
|
|
|
|
|
|
|
|
<hr/>
|
|
|
|
|
|
|
|
|
|
### 历程
|
|
|
|
|
|
|
|
|
|
Tip:
|
|
|
|
|
## 历程
|
|
|
|
|
|
|
|
|
|
> 该历程仅代表当前这个项目工程
|
|
|
|
|
<img src="https://github.com/yang520-bye/source-code-hunter/blob/main/images/spring/%E5%BE%AA%E7%8E%AF%E4%BE%9D%E8%B5%96.png"/>
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|