事务梳理
- @EnableTransactionManagement开启事务管理
- 在EnableTransactionManagement中TransactionManagementConfigurationSelector,而此类实现 AdviceModeImportSelector所以会创建 selectImports方法返回的类对象。
- 默认是PROXY模式也就是只对接口生效,接着看ProxyTransactionManagementConfiguration类。
- 构建一个Advisor,在创建bean时回遍历所有Advisor,判断是否需要通过切面进行增强。对于事务来说增加逻辑就是开启事务等操作在TransactionInterceptor中。
- 切点逻辑是在TransactionAttributeSource。
- 在创建Bean对象时如果被@Transactional被标注,那么就满足isCandidateCalss条件,那么对应的Advisor就会被用于增强。
7 因为AbstractAdvisorAutoProxyCreator实现了BeanPostProcessor,所以上面的流程才能在spring启动的时候自动执行,类继承关系图,如下
8. 再看一下TransactionInterceptor类,也就是实现事务的地方。