1.先看注解@Transactional注解如果为private修饰爆红说明它会失效
2. 会自动加载这个类 TransactionManagementConfigurer
3. 默认为mode = PROXY, 进入这个类 ProxyTransactionManagementConfiguration
4.ProxyTransactionManagementConfiguration 类 有 TransactionInterceptor监听器
5.看TransactionInterceptor 类
6.invokeWithinTransaction 方法
7.找父类
8.找到父类
9.找到实现方法
10.看到最后的这行代码会校验修饰的方法是不是public不是则返回空!
11.得出结论 @trasaction为null时注解失效
12. 再深入看AbstractFallbackTransactionAttributeSource 类可以知道@Transactional的注解解析器是:SpringTransactionAnnotationParser
总结:@Transactional会被SpringTransactionAnnotationParser解析,通过动态代理的方式被拦截器拦截,在 computeTransactionAttribute 的方法 Modifier.isPublic(method.getModifiers())判断不为public方法则返回null,导致事务状态TransactionStatus也为null所以事务失效