更新所有文章的图床,旧图床由于一些原因可能会逐渐失效

This commit is contained in:
youthlql
2022-03-15 01:00:37 +08:00
parent ed5227bc89
commit 7c206cc151
52 changed files with 781 additions and 781 deletions

View File

@@ -18,7 +18,7 @@ date: 2022-02-13 18:01:02
## 流程图-容器刷新
<img src="https://npm.elemecdn.com/youthlql@1.0.7/spring-sourcecode-v1/flow_chart/%E5%AE%B9%E5%99%A8%E5%88%B7%E6%96%B0%E6%B5%81%E7%A8%8B.jpg">
<img src="https://img.imlql.cn/youthlql@1.0.7/spring-sourcecode-v1/flow_chart/%E5%AE%B9%E5%99%A8%E5%88%B7%E6%96%B0%E6%B5%81%E7%A8%8B.jpg">
## 容器创建
@@ -209,7 +209,7 @@ public class AnnotationMainTest {
上面的方法走完我们可以看看到主要是下面4个后置处理器
<img src="https://npm.elemecdn.com/youthlql@1.0.6/spring-sourcecode-v1/chapter_05/image-20211008212541000.png"/>
<img src="https://img.imlql.cn/youthlql@1.0.6/spring-sourcecode-v1/chapter_05/image-20211008212541000.png"/>
##### RootBeanDefinition
@@ -360,7 +360,7 @@ public class AnnotationMainTest {
走完之后,注册中心肯定多了咱们的配置类
<img src="https://npm.elemecdn.com/youthlql@1.0.6/spring-sourcecode-v1/chapter_05/image-20211008213900796.png"/>
<img src="https://img.imlql.cn/youthlql@1.0.6/spring-sourcecode-v1/chapter_05/image-20211008213900796.png"/>
@@ -584,7 +584,7 @@ protected void initPropertySources() {
}
```
<img src="https://npm.elemecdn.com/youthlql@1.0.6/spring-sourcecode-v1/chapter_05/image-20211009105903816.png"/>
<img src="https://img.imlql.cn/youthlql@1.0.6/spring-sourcecode-v1/chapter_05/image-20211009105903816.png"/>
@@ -607,11 +607,11 @@ protected void initPropertySources() {
这一步有个很关键的后置处理器
<img src="https://npm.elemecdn.com/youthlql@1.0.6/spring-sourcecode-v1/chapter_05/image-20211009113419863.png"/>
<img src="https://img.imlql.cn/youthlql@1.0.6/spring-sourcecode-v1/chapter_05/image-20211009113419863.png"/>
<img src="https://npm.elemecdn.com/youthlql@1.0.6/spring-sourcecode-v1/chapter_05/image-20211009114151034.png"/>
<img src="https://img.imlql.cn/youthlql@1.0.6/spring-sourcecode-v1/chapter_05/image-20211009114151034.png"/>
@@ -746,7 +746,7 @@ protected void initPropertySources() {
<img src="https://npm.elemecdn.com/youthlql@1.0.6/spring-sourcecode-v1/chapter_05/image-20211009115044348.png"/>
<img src="https://img.imlql.cn/youthlql@1.0.6/spring-sourcecode-v1/chapter_05/image-20211009115044348.png"/>
@@ -1043,7 +1043,7 @@ public class ClassPathBeanDefinitionScanner extends ClassPathScanningCandidateCo
拿到所有类(资源),不管你有没有标@Component注解。然后挨个遍历每一个资源是不是候选的组件(根据前面准备的一些条件,在这里进行判断)
<img src="https://npm.elemecdn.com/youthlql@1.0.6/spring-sourcecode-v1/chapter_05/image-20211009145119146.png"/>
<img src="https://img.imlql.cn/youthlql@1.0.6/spring-sourcecode-v1/chapter_05/image-20211009145119146.png"/>
@@ -1051,7 +1051,7 @@ public class ClassPathBeanDefinitionScanner extends ClassPathScanningCandidateCo
最后我们看一下执行完之后的BeanDefinition信息
<img src="https://npm.elemecdn.com/youthlql@1.0.6/spring-sourcecode-v1/chapter_05/image-20211009150338205.png"/>
<img src="https://img.imlql.cn/youthlql@1.0.6/spring-sourcecode-v1/chapter_05/image-20211009150338205.png"/>
@@ -1309,7 +1309,7 @@ public class B {
这就是循环引用的场景这种写法由于Spring内部获取Bean都是通过getBean方法来获取就造成了下面的死循环。我们来看看Spring是怎么解决的。
<img src="https://npm.elemecdn.com/youthlql@1.0.6/spring-sourcecode-v1/chapter_05/image-20210928203211130.png">
<img src="https://img.imlql.cn/youthlql@1.0.6/spring-sourcecode-v1/chapter_05/image-20210928203211130.png">
@@ -1568,16 +1568,16 @@ public class B {
1. pos_1位置先进入pos_3位置的`getSingleton(beanName, true)`查看缓存中有没有A组件
<img src="https://npm.elemecdn.com/youthlql@1.0.6/spring-sourcecode-v1/chapter_05/image-20211009165057518.png"/>
<img src="https://img.imlql.cn/youthlql@1.0.6/spring-sourcecode-v1/chapter_05/image-20211009165057518.png"/>
2. 然后走到pos_2调用pos_5的`getSingleton()`开始创建A的流程
3. 在pos_5的`getSingleton()`中走到pos_6的`beforeSingletonCreation()`,就变成下面这样
<img src="https://npm.elemecdn.com/youthlql@1.0.6/spring-sourcecode-v1/chapter_05/image-20211009165924811.png"/>
<img src="https://img.imlql.cn/youthlql@1.0.6/spring-sourcecode-v1/chapter_05/image-20211009165924811.png"/>
4. 接着pos_7的会调用pos_2的lamda表达式里的`createbean()`,里面再调用`doCreateBean()`。前面讲过不多说最终调用A的无参构造(pos_8)创建完之后发现A的B属性是null。
<img src="https://npm.elemecdn.com/youthlql@1.0.6/spring-sourcecode-v1/chapter_05/image-20211009170632290.png"/>
<img src="https://img.imlql.cn/youthlql@1.0.6/spring-sourcecode-v1/chapter_05/image-20211009170632290.png"/>
5.在pos_9处的`addSingletonFactory()`来准备解决循环引用
@@ -1594,7 +1594,7 @@ public class B {
}
```
<img src="https://npm.elemecdn.com/youthlql@1.0.6/spring-sourcecode-v1/chapter_05/image-20211009171641665.png"/>
<img src="https://img.imlql.cn/youthlql@1.0.6/spring-sourcecode-v1/chapter_05/image-20211009171641665.png"/>
@@ -1662,11 +1662,11 @@ public class B {
通过前面讲过的AutowiredAnnotationBeanPostProcessor来注入B最后发现要调用setB方法给B赋值
<img src="https://npm.elemecdn.com/youthlql@1.0.6/spring-sourcecode-v1/chapter_05/image-20211009172602037.png"/>
<img src="https://img.imlql.cn/youthlql@1.0.6/spring-sourcecode-v1/chapter_05/image-20211009172602037.png"/>
7. 继续走发现要想获得B还是要调用getBean
<img src="https://npm.elemecdn.com/youthlql@1.0.6/spring-sourcecode-v1/chapter_05/image-20211009172943987.png" />
<img src="https://img.imlql.cn/youthlql@1.0.6/spring-sourcecode-v1/chapter_05/image-20211009172943987.png" />
```java
public Object resolveCandidate(String beanName, Class<?> requiredType, BeanFactory beanFactory)
@@ -1680,13 +1680,13 @@ public class B {
然后图就是这样子
<img src="https://npm.elemecdn.com/youthlql@1.0.6/spring-sourcecode-v1/chapter_05/image-20211009173310844.png"/>
<img src="https://img.imlql.cn/youthlql@1.0.6/spring-sourcecode-v1/chapter_05/image-20211009173310844.png"/>
8. B也是走这一套
<img src="https://npm.elemecdn.com/youthlql@1.0.6/spring-sourcecode-v1/chapter_05/image-20211009175223998.png"/>
<img src="https://img.imlql.cn/youthlql@1.0.6/spring-sourcecode-v1/chapter_05/image-20211009175223998.png"/>
9. B为了获取A还要再走一次getBean()流程,最终还是走到
@@ -1720,13 +1720,13 @@ public class B {
}
```
<img src="https://npm.elemecdn.com/youthlql@1.0.6/spring-sourcecode-v1/chapter_05/image-20211009175603012.png"/>
<img src="https://img.imlql.cn/youthlql@1.0.6/spring-sourcecode-v1/chapter_05/image-20211009175603012.png"/>
10.
<img src="https://npm.elemecdn.com/youthlql@1.0.6/spring-sourcecode-v1/chapter_05/image-20211009175756620.png"/>
<img src="https://img.imlql.cn/youthlql@1.0.6/spring-sourcecode-v1/chapter_05/image-20211009175756620.png"/>
@@ -1739,7 +1739,7 @@ public class B {
12. B初始化完之后回到getSingleton把自己放到单例池里
<img src="https://npm.elemecdn.com/youthlql@1.0.6/spring-sourcecode-v1/chapter_05/image-20211009180127487.png"/>
<img src="https://img.imlql.cn/youthlql@1.0.6/spring-sourcecode-v1/chapter_05/image-20211009180127487.png"/>
```java
protected void addSingleton(String beanName, Object singletonObject) {
@@ -1752,15 +1752,15 @@ protected void addSingleton(String beanName, Object singletonObject) {
}
```
<img src="https://npm.elemecdn.com/youthlql@1.0.6/spring-sourcecode-v1/chapter_05/image-20211009180214917.png"/>
<img src="https://img.imlql.cn/youthlql@1.0.6/spring-sourcecode-v1/chapter_05/image-20211009180214917.png"/>
<img src="https://npm.elemecdn.com/youthlql@1.0.6/spring-sourcecode-v1/chapter_05/image-20211009180410898.png"/>
<img src="https://img.imlql.cn/youthlql@1.0.6/spring-sourcecode-v1/chapter_05/image-20211009180410898.png"/>
13. B全部结束之后回到A的流程A赋值工作结束了然后就开始A的初始化。初始化的过程中
<img src="https://npm.elemecdn.com/youthlql@1.0.6/spring-sourcecode-v1/chapter_05/image-20211009180807630.png"/>
<img src="https://img.imlql.cn/youthlql@1.0.6/spring-sourcecode-v1/chapter_05/image-20211009180807630.png"/>
```java
protected void addSingleton(String beanName, Object singletonObject) {
@@ -1775,7 +1775,7 @@ protected void addSingleton(String beanName, Object singletonObject) {
<img src="https://npm.elemecdn.com/youthlql@1.0.6/spring-sourcecode-v1/chapter_05/image-20211009180545206.png"/>
<img src="https://img.imlql.cn/youthlql@1.0.6/spring-sourcecode-v1/chapter_05/image-20211009180545206.png"/>
@@ -1787,7 +1787,7 @@ protected void addSingleton(String beanName, Object singletonObject) {
<img src="https://npm.elemecdn.com/youthlql@1.0.6/spring-sourcecode-v1/chapter_05/循环引用.jpg">
<img src="https://img.imlql.cn/youthlql@1.0.6/spring-sourcecode-v1/chapter_05/循环引用.jpg">