spring事务传播机制 和 spring bean的生命周期和 循环依赖怎么解决的介绍一下
时间: 2024-05-24 08:15:00 浏览: 117
1. Spring事务传播机制
事务传播机制是指事务方法被嵌套调用时,如何处理事务,Spring提供了七种事务传播行为:
- REQUIRED:如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务。
- SUPPORTS:如果当前存在事务,则加入该事务;如果当前没有事务,则不使用事务。
- MANDATORY:如果当前存在事务,则加入该事务;如果当前没有事务,则抛出异常。
- REQUIRES_NEW:创建一个新的事务,如果当前存在事务,则挂起当前事务。
- NOT_SUPPORTED:以非事务方式运行,如果当前存在事务,则挂起当前事务。
- NEVER:以非事务方式运行,如果当前存在事务,则抛出异常。
- NESTED:如果当前存在事务,则在嵌套事务内执行;如果当前没有事务,则创建一个新的事务。
2. Spring Bean的生命周期
Spring容器管理Bean的生命周期,包括如下阶段:
- 实例化:当容器接收到创建Bean的请求时,会使用Java反射机制创建一个Bean对象。
- 属性赋值:将容器中配置的属性值赋值给Bean对象。
- BeanPostProcessor的前置处理:可以在Bean初始化之前进行一些处理,比如数据校验。
- 初始化:当Bean的属性赋值完成后,容器会调用Bean的初始化方法,进行一些初始化操作。
- BeanPostProcessor的后置处理:可以在Bean初始化之后进行一些处理,比如增强Bean功能。
- 使用:容器将Bean对象交给使用者使用。
- 销毁:当容器关闭时,会调用Bean的销毁方法进行清理操作。
3. Spring循环依赖问题解决方案
Spring通过三级缓存解决循环依赖问题:
- singletonObjects:单例Bean对象缓存池,缓存完全初始化完毕的Bean对象。
- earlySingletonObjects:早期Bean对象缓存池,缓存实例化但未完全初始化的Bean对象。
- singletonFactories:单例Bean对象工厂缓存池,缓存用于创建单例Bean对象的工厂。
当容器创建Bean时,会先将Bean实例化,并放入earlySingletonObjects缓存,然后将创建Bean的工厂放入singletonFactories缓存。当容器对Bean进行属性赋值时,会检查earlySingletonObjects缓存中是否有实例化但未完全初始化的Bean对象,如果有,则使用该Bean对象,否则就继续完成Bean的初始化。当Bean初始化完成后,将Bean对象放入singletonObjects缓存中,并从earlySingletonObjects和singletonFactories缓存中移除。这样就保证了循环依赖问题的解决。
阅读全文