基础知识:
- Bean单例并不是单例模式,而是单例池以Map形式管理的同单例名的同一对象,默认是该类的首字母小写存入Map(单例池讲解视频1或参考个人的spring笔记或讲解视频2)
- 当多个线程调用同一个单例,会用·ThreadLocal形成线程副本,线程之间是相互隔离的。
- Spring对事务的封装,其实是对Connection对象的封装,connection对象是单例Bean,当多个线程进行访问时,会在每个线程形成ThreadLocal副本,线程间的connection是互不影响的
- 所以事务只能在同一个线程中传播
- this.a()就相当于直接调用a(),this指的是本实例


AOP的自调用、重注入和异步调用:
- AOP是基于JDK的动态代理来实现的,这个可以见个人的spring学习笔记或者学习视频
- 以下是从动态代理角度分析出的结论,可以直接使用,有兴趣可以结合上述资料进行分析
- ① 类在实现AOP代理后,注入使用的就是代理对象,而不是原对象了
- ②本类重新注入和注入别的类的实例,都是引入了新的的实例对象
- ③同一实例的自调用,被调用方法会被抹去aop特性而走原始对象,不同实例间的调用,AOP特性不会受到影响
- ④类中存在重新注入又存在异步调用的时候,启动时会报错,建议把异步调用放在没有重新注入的类中


本文详细探讨了Spring中的事务管理和AOP代理在自调用、重注入及异步调用场景下的行为。通过分析,揭示了事务在异常处理、线程隔离及传播特性等方面的关键点,强调了理解这些概念对于优化并发性能和确保数据一致性的重要性。
最低0.47元/天 解锁文章
1098

被折叠的 条评论
为什么被折叠?



