Appearance
谈谈对Spring事务和AOP底层实现原理的区别
Spring的声明式事务其实也是通过AOP的这一套底层实现原理实现的,都是通过同一个bean的后置处理器来完成的动态代理创建只是:
- 创建动态代理的匹配方式不一样:
区别就是AOP的增强通常是通过切面+切点+通知来完成的, 在创建bean的时候发现bean和切点表达式匹配就会创建动态代理。
而事务内置一个增强类, 在创建bean的时候, 一旦发现你的类加了@Transactional注解 就会创建动态代理。
- 执行动态代理的增强不一样:
在执行AOP的bean时会先执行动态代理的增强类, 通过责任链分别按顺序执行通知。
在执行事务的bean的时候会先执行动态代理的增强类, 在执行目标方法前进行异常捕捉,出现异常回滚事务, 无异常提交事务。
行我就给大家总结这些, 当然还是不建议死记硬背,最好能学下spring源码,有兴趣私信我。
更新: 2024-06-27 22:52:56
原文: https://www.yuque.com/tulingzhouyu/db22bv/zimkfnsvx3m5ogo1