@@ -8282,7 +8282,7 @@ ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.
82828282 * **AOP,跳转注解**,`AbstractAutoProxyCreatorwrapIfNecessary -> creatProxy`
82838283 * 如果不存在循环依赖,动态代理在此处完成,否则会提前创建
82848284
8285- * 循环依赖检查:如果存在循环依赖,在属性填充阶段会生成Bean对象的动态代理,则缓存中放置了提前生成的代理对象,然后使用原始bean继续执行初始化,所以返回最终bean前,把原始bean置换为代理对象返回;
8285+ * 循环依赖检查:如果存在循环依赖,在属性填充阶段会生成Bean对象的动态代理,则缓存中放置了提前生成的代理对象,然后使用原始bean继续执行初始化,所以返回最终bean前,把原始bean置换为代理对象返回
82868286
82878287 存在循环依赖,在初始化的后置处理中不会重新创建代理对象,真正创建动态代理Bean的阶段是在获取提前引用阶段,**循环依赖**详解,看后置处理源码:
82888288
@@ -8622,21 +8622,20 @@ AnnotationAwareAspectJAutoProxyCreator是这种类型的后置处理器:Instan
86228622 `if(是否实现接口)`为真进入:`applyBeanPostProcessorsBeforeInstantiation`方法
86238623
86248624 * `this.advisedBeans.containsKey(cacheKey)`:判断当前bean是否在advisedBeans中(保存了所有需要增强bean)
8625-
8626- * `isInfrastructureClass`:判断当前bean是否是基础类型的Advice、Pointcut、Advisor、AopInfrastructureBean,或者(子类中)是否是切面Aspect
8627-
8625+ * `isInfrastructureClass`:判断当前bean是否是基础类型的Advice、Pointcut、Advisor、AopInfrastructureBean,或者(子类中)是否是切面Aspect
86288626 * 是否需要跳过:子类`AspectJAwareAdvisorAutoProxyCreator.shouldSkip()`
86298627
86308628 * `findCandidateAdvisors()`:获取候选的增强器(切面里面的通知方法)每一个封装的通知方法的增强器是 InstantiationModelAwarePointcutAdvisor**(AAAPC)**
86318629
86328630 * `if()`:判断每一个增强器是否是 AspectJPointcutAdvisor 类型的,返回true,否则继续执行
8633- * `return super.shouldSkip(beanClass, beanName)`:永远返回false
8634-
8631+ * `return super.shouldSkip(beanClass, beanName)`:永远返回false
86358632 * `getCustomTargetSource(beanClass, beanName)`:返回为空,doCreateBean()
8633+
86368634
8637- **进入applyBeanPostProcessorsAfterInitialization:后置处理器创建AOP**
8638-
8639- ```java
8635+
8636+ **进入applyBeanPostProcessorsAfterInitialization:后置处理器创建AOP**
8637+
8638+ ```java
86408639 //如果Bean被子类标识为要代理的bean,则使用配置的拦截器创建代理
86418640 public Object postProcessAfterInitialization(@Nullable Object bean,String bN){
86428641 if (bean != null) {
@@ -8650,32 +8649,32 @@ AnnotationAwareAspectJAutoProxyCreator是这种类型的后置处理器:Instan
86508649 return bean;
86518650 }
86528651 ```
8653-
8654- 创建动态代理:`wrapIfNecessary()`调用`createProxy()`(wrap包装)
8655-
8656- 注释:Create proxy if we have advice
8657-
8658- * `getAdvicesAndAdvisorsForBean()`:获取当前bean的所有增强器 (通知方法),**为空就直接返回**
8659-
8660- * findEligibleAdvisors():找到哪些通知方法是需要切入当前bean方法的
8652+
8653+ 创建动态代理:`wrapIfNecessary()`调用`createProxy()`(wrap包装)
8654+
8655+ 注释:Create proxy if we have advice
8656+
8657+ * `getAdvicesAndAdvisorsForBean()`:获取当前bean的所有增强器 (通知方法),**为空就直接返回**
8658+
8659+ * findEligibleAdvisors():找到哪些通知方法是需要切入当前bean方法的
86618660 * AopUtils.findAdvisorsThatCanApply():获取到能在bean使用的增强器
86628661 * sortAdvisors(eligibleAdvisors):给增强器排序
8663-
8664- * `this.advisedBeans.put(cacheKey, Boolean.TRUE)`:保存当前bean在advisedBeans中
8665-
8666- * `Object proxy = createProxy(...)`:如果增强器不为空就创建代理,创建当前bean的代理对象
8667-
8668- * buildAdvisors(beanName, specificInterceptors):获取所有增强器(通知方法)
8669-
8670- * 保存到proxyFactory
8671-
8672- * `return proxyFactory.getProxy(getProxyClassLoader())`:返回代理对象
8673-
8674- * ProxyFactory类:`return createAopProxy().getProxy(classLoader)`
8675-
8676- DefaultAopProxyFactory类:给容器中返回当前组件使用增强了的代理对象
8677-
8678- ```java
8662+
8663+ * `this.advisedBeans.put(cacheKey, Boolean.TRUE)`:保存当前bean在advisedBeans中
8664+
8665+ * `Object proxy = createProxy(...)`:如果增强器不为空就创建代理,创建当前bean的代理对象
8666+
8667+ * buildAdvisors(beanName, specificInterceptors):获取所有增强器(通知方法)
8668+
8669+ * 保存到proxyFactory
8670+
8671+ * `return proxyFactory.getProxy(getProxyClassLoader())`:返回代理对象
8672+
8673+ * ProxyFactory类:`return createAopProxy().getProxy(classLoader)`
8674+
8675+ DefaultAopProxyFactory类:给容器中返回当前组件使用增强了的代理对象
8676+
8677+ ```java
86798678 @Override
86808679 public AopProxy createAopProxy(AdvisedSupport config) throws AopConfigException {
86818680 if (config.isOptimize() || config.isProxyTargetClass() || hasNoUserSuppliedProxyInterfaces(config)) {
@@ -8691,7 +8690,7 @@ AnnotationAwareAspectJAutoProxyCreator是这种类型的后置处理器:Instan
86918690 }
86928691 }
86938692 ```
8694-
8693+
869586944. 给容器中返回使用cglib增强了的代理对象,**初始化完成,加入容器**
86968695
869786965. 以后容器中获取到的就是这个组件的代理对象,执行目标方法的时候,代理对象就会执行通知方法的流程
0 commit comments