1. 先找到这个注解:
![](https://i-blog.csdnimg.cn/blog_migrate/b045eb96f4e7a448d129c5e5987eb14c.png)
image.png
2. 会自动加载这个类
![](https://i-blog.csdnimg.cn/blog_migrate/aac4da8c3730893487f515bdcb512e08.png)
image.png
3. 默认为mode = PROXY, 进入这个类
![](https://i-blog.csdnimg.cn/blog_migrate/7457c0089533e4f9995a0675a01dccfd.png)
image.png
4. ProxyTransactionManagementConfiguration 类
![](https://i-blog.csdnimg.cn/blog_migrate/28c69fc4bba0ca458ed3a738110a932d.png)
image.png
5. 看TransactionInterceptor 类
![](https://i-blog.csdnimg.cn/blog_migrate/f95d0846a466d2af02b95ad24fab96c9.png)
image.png
6. invokeWithinTransaction 方法
![](https://i-blog.csdnimg.cn/blog_migrate/e69aff7a2e0dd92456ac08037a90a766.png)
image.png
7. 发现没有找到注入的类
![](https://i-blog.csdnimg.cn/blog_migrate/d74cb6226e5e614fb684b4443571fb00.png)
image.png
8. 找到父类
![](https://i-blog.csdnimg.cn/blog_migrate/ad9db906eca878d9809e6e0aa146cdc6.png)
image.png
9. 找到实现方法
![](https://i-blog.csdnimg.cn/blog_migrate/f4b9cab768193cb54147bfc2ef9d9cf5.png)
image.png
10. 看到对目标方法是public的校验
![](https://i-blog.csdnimg.cn/blog_migrate/ebc9ca59a8a3fdd9393b20372a531e72.png)
image.png
11. 得出结果,为什么@Transactional加在private上无效
![](https://i-blog.csdnimg.cn/blog_migrate/2c90e2cb8c482c68881119e4e5c95ca8.png)
image.png
12. 再深入看AbstractFallbackTransactionAttributeSource 类可以知道@Transactional的注解解析器是:SpringTransactionAnnotationParser
![](https://i-blog.csdnimg.cn/blog_migrate/4c55bb3ac5f6b7740fd13df3a98c6957.png)
image.png