@@ -7886,17 +7886,19 @@ public void addAccount{}
78867886
78877887 原因:Spring的默认的事务规则是遇到运行异常(RuntimeException)和程序错误(Error)才会回滚。想针对非检测异常进行事务回滚,可以在@Transactional 注解里使用rollbackFor 属性明确指定异常
78887888
7889- * 情况5:Spring的事务传播策略在内部方法调用时将不起作用 ,事务注解加到要调用方法上
7889+ * 情况5:Spring的事务传播策略在**内部方法**调用时将不起作用 ,事务注解加到要调用方法上
78907890
7891+ 原因:Spring的事务都是使用AOP代理的模式,仅有外部方法调用过程才会被代理截获,事务才会有效,就是方法调用本对象的另一个方法,没有通过代理类,事务也就无法生效
7892+
78917893 ```java
78927894 @Transactional
78937895 public int add(){
78947896 update();
78957897 }
78967898 //注解添加在update方法上无效,需要添加到add()方法上
7897- public int update(){}
7899+ public int update(){}
78987900 ```
7899-
7901+
79007902
79017903
79027904
@@ -8630,11 +8632,12 @@ AnnotationAwareAspectJAutoProxyCreator是这种类型的后置处理器:Instan
86308632 * `if()`:判断每一个增强器是否是 AspectJPointcutAdvisor 类型的,返回true,否则继续执行
86318633 * `return super.shouldSkip(beanClass, beanName)`:永远返回false
86328634 * `getCustomTargetSource(beanClass, beanName)`:返回为空,doCreateBean()
8633-
8635+
8636+
8637+
86348638
8635-
86368639**进入applyBeanPostProcessorsAfterInitialization:后置处理器创建AOP**
8637-
8640+
86388641```java
86398642 //如果Bean被子类标识为要代理的bean,则使用配置的拦截器创建代理
86408643 public Object postProcessAfterInitialization(@Nullable Object bean,String bN){
@@ -8648,32 +8651,32 @@ AnnotationAwareAspectJAutoProxyCreator是这种类型的后置处理器:Instan
86488651 }
86498652 return bean;
86508653 }
8651- ```
8652-
8654+ ```
8655+
86538656创建动态代理:`wrapIfNecessary()`调用`createProxy()`(wrap包装)
8654-
8657+
86558658注释:Create proxy if we have advice
8656-
8659+
86578660* `getAdvicesAndAdvisorsForBean()`:获取当前bean的所有增强器 (通知方法),**为空就直接返回**
8658-
8661+
86598662 * findEligibleAdvisors():找到哪些通知方法是需要切入当前bean方法的
86608663 * AopUtils.findAdvisorsThatCanApply():获取到能在bean使用的增强器
86618664 * sortAdvisors(eligibleAdvisors):给增强器排序
8662-
8665+
86638666* `this.advisedBeans.put(cacheKey, Boolean.TRUE)`:保存当前bean在advisedBeans中
8664-
8667+
86658668* `Object proxy = createProxy(...)`:如果增强器不为空就创建代理,创建当前bean的代理对象
8666-
8669+
86678670 * buildAdvisors(beanName, specificInterceptors):获取所有增强器(通知方法)
8668-
8671+
86698672 * 保存到proxyFactory
8670-
8673+
86718674 * `return proxyFactory.getProxy(getProxyClassLoader())`:返回代理对象
8672-
8675+
86738676 * ProxyFactory类:`return createAopProxy().getProxy(classLoader)`
8674-
8677+
86758678 DefaultAopProxyFactory类:给容器中返回当前组件使用增强了的代理对象
8676-
8679+
86778680 ```java
86788681 @Override
86798682 public AopProxy createAopProxy(AdvisedSupport config) throws AopConfigException {
@@ -8689,8 +8692,8 @@ AnnotationAwareAspectJAutoProxyCreator是这种类型的后置处理器:Instan
86898692 return new JdkDynamicAopProxy(config);
86908693 }
86918694 }
8692- ```
8693-
8695+ ```
8696+
869486974. 给容器中返回使用cglib增强了的代理对象,**初始化完成,加入容器**
86958698
869686995. 以后容器中获取到的就是这个组件的代理对象,执行目标方法的时候,代理对象就会执行通知方法的流程
@@ -10543,7 +10546,7 @@ public void afterCompletion(HttpServletRequest request,
1054310546
1054410547
1054510548
10546- ### 自定义拦截器
10549+ ### 自定义
1054710550
1054810551* Contoller层
1054910552
@@ -13221,7 +13224,7 @@ ConditionContext类API:
1322113224
1322213225#### 自定义注解
1322313226
13224- 需求:将类的判断定义为动态的。 判断哪个字节码文件存在可以动态指定。
13227+ 需求:将类的判断定义为动态的, 判断哪个字节码文件存在可以动态指定
1322513228
1322613229* 自定义条件注解类
1322713230
0 commit comments