图床修改

This commit is contained in:
youthlql
2022-07-24 20:30:09 +08:00
parent 130c2ff4bf
commit 2fd68af81d
53 changed files with 817 additions and 817 deletions

View File

@@ -222,7 +222,7 @@ class AspectJAutoProxyRegistrar implements ImportBeanDefinitionRegistrar {
### Debug调用栈
<img src="https://upyunimg.imlql.cn/youthlql@1.0.6/spring-sourcecode-v1/chapter_06/image-20211010202000109.png"/>
<img src="https://npm.elemecdn.com/youthlql@1.0.6/spring-sourcecode-v1/chapter_06/image-20211010202000109.png"/>
### ImportBeanDefinitionRegistrar
@@ -290,7 +290,7 @@ pos_1 Debug进去是下面的方法
### AnnotationAwareAspectJAutoProxyCreator后置处理器
<img src="https://upyunimg.imlql.cn/youthlql@1.0.6/spring-sourcecode-v1/chapter_06/image-20211010202725286.png"/>
<img src="https://npm.elemecdn.com/youthlql@1.0.6/spring-sourcecode-v1/chapter_06/image-20211010202725286.png"/>
我们发现这就是一个后置处理器,印证了我们之前说过的几乎所有功能增强或功能附加都是由后置处理器来完成
@@ -318,13 +318,13 @@ pos_1 Debug进去是下面的方法
##### 作用
<img src="https://upyunimg.imlql.cn/youthlql@1.0.6/spring-sourcecode-v1/chapter_06/image-20211011222513844.png"/>
<img src="https://npm.elemecdn.com/youthlql@1.0.6/spring-sourcecode-v1/chapter_06/image-20211011222513844.png"/>
1. 由于它是后置处理器所以肯定是在refresh方法里的registerBeanPostProcessors这一步开始干活的
2. 果然是从getBean调用到了我们的重写方法断点处也就验证了我们上面说怎么分析。绿色包含的前面已经讲过不再赘述。
3. 也确实是AnnotationAwareAspectJAutoProxyCreator走到这里说明前面已经创建出了AnnotationAwareAspectJAutoProxyCreator对象(前面怎么创建的,getbean的流程之前已经讲的很清楚了)后面只是对AnnotationAwareAspectJAutoProxyCreator进行初始化
<img src="https://upyunimg.imlql.cn/youthlql@1.0.6/spring-sourcecode-v1/chapter_06/image-20211011225209123.png" />
<img src="https://npm.elemecdn.com/youthlql@1.0.6/spring-sourcecode-v1/chapter_06/image-20211011225209123.png" />
##### AbstractAutowireCapableBeanFactory#initializeBean()进行初始化
@@ -410,7 +410,7 @@ pos_1 Debug进去是下面的方法
}
```
<img src="https://upyunimg.imlql.cn/youthlql@1.0.6/spring-sourcecode-v1/chapter_06/image-20211011223856339.png" />
<img src="https://npm.elemecdn.com/youthlql@1.0.6/spring-sourcecode-v1/chapter_06/image-20211011223856339.png" />
```java
public ReflectiveAspectJAdvisorFactory(@Nullable BeanFactory beanFactory) {
@@ -483,7 +483,7 @@ public ReflectiveAspectJAdvisorFactory(@Nullable BeanFactory beanFactory) {
}
```
<img src="https://upyunimg.imlql.cn/youthlql@1.0.6/spring-sourcecode-v1/chapter_06/image-20211011224506258.png"/>
<img src="https://npm.elemecdn.com/youthlql@1.0.6/spring-sourcecode-v1/chapter_06/image-20211011224506258.png"/>
1. 我们来看一下是什么时候触发的看图中的beanName==myBeanPostProcessor时触发的也就是创建完AnnotationAwareAspectJAutoProxyCreator第一次创建别的后置处理器时触发的。
2. 这里虽然开始参与其它Bean的创建过程但也可能是什么都没做。
@@ -610,7 +610,7 @@ protected boolean isInfrastructureClass(Class<?> beanClass) {
#### Debug调用栈-调用aspectJAdvisorsBuilder的findCandidateAdvisors()方法
<img src="https://upyunimg.imlql.cn/youthlql@1.0.6/spring-sourcecode-v1/chapter_06/image-20211011230711617.png"/>
<img src="https://npm.elemecdn.com/youthlql@1.0.6/spring-sourcecode-v1/chapter_06/image-20211011230711617.png"/>
AbstractAutoProxyCreator#postProcessBeforeInstantiation()这个方法上面刚分析过这次来分析shouldskip()
@@ -633,7 +633,7 @@ AbstractAutoProxyCreator#postProcessBeforeInstantiation()这个方法,上面
<img src="https://upyunimg.imlql.cn/youthlql@1.0.6/spring-sourcecode-v1/chapter_06/image-20211011230223566.png"/>
<img src="https://npm.elemecdn.com/youthlql@1.0.6/spring-sourcecode-v1/chapter_06/image-20211011230223566.png"/>
它进去的时候就是beanName==LogAspect我们看看它是怎么判断的
@@ -653,7 +653,7 @@ AbstractAutoProxyCreator#postProcessBeforeInstantiation()这个方法,上面
我们这里先放行,看构造了哪些增强器
<img src="https://upyunimg.imlql.cn/youthlql@1.0.6/spring-sourcecode-v1/chapter_06/image-20211011233722352.png"/>
<img src="https://npm.elemecdn.com/youthlql@1.0.6/spring-sourcecode-v1/chapter_06/image-20211011233722352.png"/>
##### BeanFactoryAspectJAdvisorsBuilder#buildAspectJAdvisors()找到切面并创建增强器advisors
@@ -738,11 +738,11 @@ AbstractAutoProxyCreator#postProcessBeforeInstantiation()这个方法,上面
<img src="https://upyunimg.imlql.cn/youthlql@1.0.6/spring-sourcecode-v1/chapter_06/image-20211011232136364.png"/>
<img src="https://npm.elemecdn.com/youthlql@1.0.6/spring-sourcecode-v1/chapter_06/image-20211011232136364.png"/>
for循环所有组件之后有切面的话就赋值然后aspectNames
<img src="https://upyunimg.imlql.cn/youthlql@1.0.6/spring-sourcecode-v1/chapter_06/image-20211011232645429.png"/>
<img src="https://npm.elemecdn.com/youthlql@1.0.6/spring-sourcecode-v1/chapter_06/image-20211011232645429.png"/>
#### 结论
@@ -939,7 +939,7 @@ AbstractAutoProxyCreator
<img src="https://upyunimg.imlql.cn/youthlql@1.0.6/spring-sourcecode-v1/chapter_06/image-20211012113939403.png"/>
<img src="https://npm.elemecdn.com/youthlql@1.0.6/spring-sourcecode-v1/chapter_06/image-20211012113939403.png"/>
@@ -981,21 +981,21 @@ AbstractAutoProxyCreator
<img src="https://upyunimg.imlql.cn/youthlql@1.0.6/spring-sourcecode-v1/chapter_06/image-20211012115005897.png"/>
<img src="https://npm.elemecdn.com/youthlql@1.0.6/spring-sourcecode-v1/chapter_06/image-20211012115005897.png"/>
获取父类的方法
<img src="https://upyunimg.imlql.cn/youthlql@1.0.6/spring-sourcecode-v1/chapter_06/image-20211012115205531.png"/>
<img src="https://npm.elemecdn.com/youthlql@1.0.6/spring-sourcecode-v1/chapter_06/image-20211012115205531.png"/>
然后回到这里
<img src="https://upyunimg.imlql.cn/youthlql@1.0.6/spring-sourcecode-v1/chapter_06/image-20211012142115626.png"/>
<img src="https://npm.elemecdn.com/youthlql@1.0.6/spring-sourcecode-v1/chapter_06/image-20211012142115626.png"/>
最后回到这个for循环循环所有的方法
<img src="https://upyunimg.imlql.cn/youthlql@1.0.6/spring-sourcecode-v1/chapter_06/image-20211012142802483.png"/>
<img src="https://npm.elemecdn.com/youthlql@1.0.6/spring-sourcecode-v1/chapter_06/image-20211012142802483.png"/>
#### ReflectiveAspectJAdvisorFactory#getAdvisor()
@@ -1126,7 +1126,7 @@ AbstractAutoProxyCreator
到了初始化这里了说明前面无参构造创建myBeanPostProcessor对象已经完成了
<img src="https://upyunimg.imlql.cn/youthlql@1.0.6/spring-sourcecode-v1/chapter_06/image-20211011233400056.png"/>
<img src="https://npm.elemecdn.com/youthlql@1.0.6/spring-sourcecode-v1/chapter_06/image-20211011233400056.png"/>
#### AnnotationAwareAspectJAutoProxyCreator#findCandidateAdvisors()
@@ -1148,7 +1148,7 @@ protected List<Advisor> findCandidateAdvisors() {
我们这里先放行,看构造了哪些增强器
<img src="https://upyunimg.imlql.cn/youthlql@1.0.6/spring-sourcecode-v1/chapter_06/image-20211011233722352.png"/>
<img src="https://npm.elemecdn.com/youthlql@1.0.6/spring-sourcecode-v1/chapter_06/image-20211011233722352.png"/>
#### BeanFactoryAspectJAdvisorsBuilder#buildAspectJAdvisors()
@@ -1246,7 +1246,7 @@ protected List<Advisor> findCandidateAdvisors() {
finishBeanFactoryInitialization(beanFactory);
```
<img src="https://upyunimg.imlql.cn/youthlql@1.0.6/spring-sourcecode-v1/chapter_06/image-20211012153225770.png" />
<img src="https://npm.elemecdn.com/youthlql@1.0.6/spring-sourcecode-v1/chapter_06/image-20211012153225770.png" />
### 创建HelloService代理对象之前的工作
@@ -1254,25 +1254,25 @@ finishBeanFactoryInitialization(beanFactory);
我们在诸如下面的地方打上条件断点`beanName.equals("helloService") || beanName.equals("logAspect")`
<img src="https://upyunimg.imlql.cn/youthlql@1.0.6/spring-sourcecode-v1/chapter_06/image-20211012153646657.png"/>
<img src="https://npm.elemecdn.com/youthlql@1.0.6/spring-sourcecode-v1/chapter_06/image-20211012153646657.png"/>
debug放行
<img src="https://upyunimg.imlql.cn/youthlql@1.0.6/spring-sourcecode-v1/chapter_06/image-20211012154005700.png"/>
<img src="https://npm.elemecdn.com/youthlql@1.0.6/spring-sourcecode-v1/chapter_06/image-20211012154005700.png"/>
往下走进入getBean()
<img src="https://upyunimg.imlql.cn/youthlql@1.0.6/spring-sourcecode-v1/chapter_06/image-20211012154205498.png"/>
<img src="https://npm.elemecdn.com/youthlql@1.0.6/spring-sourcecode-v1/chapter_06/image-20211012154205498.png"/>
<img src="https://upyunimg.imlql.cn/youthlql@1.0.6/spring-sourcecode-v1/chapter_06/image-20211012154413318.png" />
<img src="https://npm.elemecdn.com/youthlql@1.0.6/spring-sourcecode-v1/chapter_06/image-20211012154413318.png" />
走到熟悉的createbean
<img src="https://upyunimg.imlql.cn/youthlql@1.0.6/spring-sourcecode-v1/chapter_06/image-20211012155231730.png"/>
<img src="https://npm.elemecdn.com/youthlql@1.0.6/spring-sourcecode-v1/chapter_06/image-20211012155231730.png"/>
我们以前讲过resolveBeforeInstantiation是返回代理对象的机会我们现在来看一下AOP有没有在这里给helloService返回代理对象。F7进入此方法
@@ -1302,25 +1302,25 @@ debug放行
}
```
<img src="https://upyunimg.imlql.cn/youthlql@1.0.6/spring-sourcecode-v1/chapter_06/image-20211012160014471.png"/>
<img src="https://npm.elemecdn.com/youthlql@1.0.6/spring-sourcecode-v1/chapter_06/image-20211012160014471.png"/>
这是有一个负责AOP功能的后置处理器就是我们前面说的那个
当循环到这个后置处理器的时候,我们进入方法
<img src="https://upyunimg.imlql.cn/youthlql@1.0.6/spring-sourcecode-v1/chapter_06/image-20211012161510441.png"/>
<img src="https://npm.elemecdn.com/youthlql@1.0.6/spring-sourcecode-v1/chapter_06/image-20211012161510441.png"/>
<img src="https://upyunimg.imlql.cn/youthlql@1.0.6/spring-sourcecode-v1/chapter_06/image-20211012161817522.png"/>
<img src="https://npm.elemecdn.com/youthlql@1.0.6/spring-sourcecode-v1/chapter_06/image-20211012161817522.png"/>
我debug完之后发现前置过程啥也没干返回了个NULL。什么都没干的原因就是**负责AOP功能的后置处理器第一次运行准备好数据**和**构建增强器**这两步已经干过了
<img src="https://upyunimg.imlql.cn/youthlql@1.0.6/spring-sourcecode-v1/chapter_06/image-20211012162158546.png"/>
<img src="https://npm.elemecdn.com/youthlql@1.0.6/spring-sourcecode-v1/chapter_06/image-20211012162158546.png"/>
@@ -1329,11 +1329,11 @@ debug放行
1. 最后我们惊奇的发现AOP的后置处理器在resolveBeforeInstantiation这一步竟然没有返回代理对象这可能跟大部分人想的有出入。
2. 想一下为什么没有返回代理对象走到这一步的时候咱们的HelloService对象都还没有创建更没有赋值初始化。你如果在这里直接返回代理对象那假设HelloService还注入了其它组件那你返回的代理对象不就没有这些组件了嘛直接跳过了。
<img src="https://upyunimg.imlql.cn/youthlql@1.0.6/spring-sourcecode-v1/chapter_06/image-20211012163220063.png"/>
<img src="https://npm.elemecdn.com/youthlql@1.0.6/spring-sourcecode-v1/chapter_06/image-20211012163220063.png"/>
往下走,创建一个最原始的对象
<img src="https://upyunimg.imlql.cn/youthlql@1.0.6/spring-sourcecode-v1/chapter_06/image-20211012165217922.png" />
<img src="https://npm.elemecdn.com/youthlql@1.0.6/spring-sourcecode-v1/chapter_06/image-20211012165217922.png" />
#### 赋值
@@ -1341,15 +1341,15 @@ debug放行
往下走进入赋值环节
<img src="https://upyunimg.imlql.cn/youthlql@1.0.6/spring-sourcecode-v1/chapter_06/image-20211012165702336.png" />
<img src="https://npm.elemecdn.com/youthlql@1.0.6/spring-sourcecode-v1/chapter_06/image-20211012165702336.png" />
我们来看下AOP的后置处理器在这一步有没有做事
<img src="https://upyunimg.imlql.cn/youthlql@1.0.6/spring-sourcecode-v1/chapter_06/image-20211012165933421.png"/>
<img src="https://npm.elemecdn.com/youthlql@1.0.6/spring-sourcecode-v1/chapter_06/image-20211012165933421.png"/>
啥事没干,直接返回
<img src="https://upyunimg.imlql.cn/youthlql@1.0.6/spring-sourcecode-v1/chapter_06/image-20211012170025142.png"/>
<img src="https://npm.elemecdn.com/youthlql@1.0.6/spring-sourcecode-v1/chapter_06/image-20211012170025142.png"/>
@@ -1359,15 +1359,15 @@ debug放行
#### 初始化
<img src="https://upyunimg.imlql.cn/youthlql@1.0.6/spring-sourcecode-v1/chapter_06/image-20211012170944132.png"/>
<img src="https://npm.elemecdn.com/youthlql@1.0.6/spring-sourcecode-v1/chapter_06/image-20211012170944132.png"/>
进入之后发现AOP的后置处理器在此介入了我们再进去看下到底做了啥
<img src="https://upyunimg.imlql.cn/youthlql@1.0.6/spring-sourcecode-v1/chapter_06/image-20211012171702722.png"/>
<img src="https://npm.elemecdn.com/youthlql@1.0.6/spring-sourcecode-v1/chapter_06/image-20211012171702722.png"/>
啥也没做直接返回原生Bean
<img src="https://upyunimg.imlql.cn/youthlql@1.0.6/spring-sourcecode-v1/chapter_06/image-20211012171813664.png" />
<img src="https://npm.elemecdn.com/youthlql@1.0.6/spring-sourcecode-v1/chapter_06/image-20211012171813664.png" />
@@ -1376,11 +1376,11 @@ debug放行
##### applyBeanPostProcessorsAfterInitialization后置初始化方法
<img src="https://upyunimg.imlql.cn/youthlql@1.0.6/spring-sourcecode-v1/chapter_06/image-20211012172107405.png" />
<img src="https://npm.elemecdn.com/youthlql@1.0.6/spring-sourcecode-v1/chapter_06/image-20211012172107405.png" />
<img src="https://upyunimg.imlql.cn/youthlql@1.0.6/spring-sourcecode-v1/chapter_06/image-20211012172308103.png"/>
<img src="https://npm.elemecdn.com/youthlql@1.0.6/spring-sourcecode-v1/chapter_06/image-20211012172308103.png"/>
F7进入方法
@@ -1471,7 +1471,7 @@ F7进入方法
我发现他调用了咱们之前讲过的方法
<img src="https://upyunimg.imlql.cn/youthlql@1.0.6/spring-sourcecode-v1/chapter_06/image-20211012173003595.png" />
<img src="https://npm.elemecdn.com/youthlql@1.0.6/spring-sourcecode-v1/chapter_06/image-20211012173003595.png" />
因为之前调用过,缓存中有,直接返回
@@ -1520,7 +1520,7 @@ F7进入方法
}
```
<img src="https://upyunimg.imlql.cn/youthlql@1.0.6/spring-sourcecode-v1/chapter_06/image-20211012173631784.png"/>
<img src="https://npm.elemecdn.com/youthlql@1.0.6/spring-sourcecode-v1/chapter_06/image-20211012173631784.png"/>
@@ -1568,7 +1568,7 @@ F7进入方法
接着我们返回到这一步,看到了这几个增强器
<img src="https://upyunimg.imlql.cn/youthlql@1.0.6/spring-sourcecode-v1/chapter_06/image-20211012174251200.png" />
<img src="https://npm.elemecdn.com/youthlql@1.0.6/spring-sourcecode-v1/chapter_06/image-20211012174251200.png" />
这里又有一个重要方法
@@ -1605,11 +1605,11 @@ F7进入方法
}
```
<img src="https://upyunimg.imlql.cn/youthlql@1.0.6/spring-sourcecode-v1/chapter_06/image-20211012174626015.png" />
<img src="https://npm.elemecdn.com/youthlql@1.0.6/spring-sourcecode-v1/chapter_06/image-20211012174626015.png" />
回到AbstractAutoProxyCreator#wrapIfNecessary,调用下面的方法真正开始创建代理对象
<img src="https://upyunimg.imlql.cn/youthlql@1.0.6/spring-sourcecode-v1/chapter_06/image-20211012191915487.png"/>
<img src="https://npm.elemecdn.com/youthlql@1.0.6/spring-sourcecode-v1/chapter_06/image-20211012191915487.png"/>
##### AbstractAutoProxyCreator#createProxy()开始创建代理对象
@@ -1761,27 +1761,27 @@ F7进入方法
最后返回
<img src="https://upyunimg.imlql.cn/youthlql@1.0.6/spring-sourcecode-v1/chapter_06/image-20211012193828795.png" />
<img src="https://npm.elemecdn.com/youthlql@1.0.6/spring-sourcecode-v1/chapter_06/image-20211012193828795.png" />
继续返回
<img src="https://upyunimg.imlql.cn/youthlql@1.0.6/spring-sourcecode-v1/chapter_06/image-20211012194036836.png"/>
<img src="https://npm.elemecdn.com/youthlql@1.0.6/spring-sourcecode-v1/chapter_06/image-20211012194036836.png"/>
<img src="https://upyunimg.imlql.cn/youthlql@1.0.6/spring-sourcecode-v1/chapter_06/image-20211012194217705.png"/>
<img src="https://npm.elemecdn.com/youthlql@1.0.6/spring-sourcecode-v1/chapter_06/image-20211012194217705.png"/>
最终单例池里就有代理对象了
<img src="https://upyunimg.imlql.cn/youthlql@1.0.6/spring-sourcecode-v1/chapter_06/image-20211012194446377.png"/>
<img src="https://npm.elemecdn.com/youthlql@1.0.6/spring-sourcecode-v1/chapter_06/image-20211012194446377.png"/>
##### logAspect创建原生对象而不是代理对象
logAspect切面对象最后创建的是原生对象如下图因为他不需要代理
<img src="https://upyunimg.imlql.cn/youthlql@1.0.6/spring-sourcecode-v1/chapter_06/image-20211012194718066.png" />
<img src="https://npm.elemecdn.com/youthlql@1.0.6/spring-sourcecode-v1/chapter_06/image-20211012194718066.png" />