1、spring的事务传播机制是什么
多个事务方法相互调用时,spring提供了7种不同的传播特性
REQUIRED:默认的传播特性,如果当前没有事务,则新建一个事务,如果当前存在事务,则加入这个事务,一般情况下不做特殊设置的时候,用的就是该事务
SUPPORTS:当前存在事务,则加入当前事务,当前没有事务,则以非事务的方式运行
MANDATORY:当前存在事务,则加入当前事务,如果当前事务不存在,则抛异常
REQUIRED_NEW:创建一个新事务,如果存在当前事务,则挂机该事务
NOT_SUPPORTED:以非事务方式执行,如果存在当前事务,则挂起当前事务
NEVER:不使用事务,如果当前事务存在,则抛出异常
NESTED:如果当前事务存在,则在嵌套事务中执行,否则和REQUIRED的操作一样
2、spring事务的隔离级别有哪些
read uncommitted:读未提交
red committed:读已提交
repeatable read:可重复读
serializable:串行化
在进行配置的时候,如果数据库和spring代码中的隔离级别不同,那么以spring的配置为主
3、spring事务的实现原理
两种事务的实现方式,一种是编程式事务,一种是声明式事务,通过@Transactional注解来实现
事务操作是AOP的一个核心提现,当一个方法添加@Transactional注解之后,spring会基于这个类生成一个代理对象,会将这个代理对象作为bean,当使用这个代理对象的方法的时候,如果有事务处理,那么会先把事务的自动提交给关闭掉,然后去执行具体的业务逻辑,如果执行逻辑没有出现异常,那么代理逻辑就会直接提交,如果出现任何异常情况,那么直接进行回滚操作,当然用户可以控制对哪些异常进行回滚操作
4、spring事务什么时候会失效
bean对象没有被spring容器管理
方法的访问修饰符不是public
自身调用问题
数据源没有配置事务管理器
异常被捕获
异常类型错误或者配置错误
5、spring支持的bean作用域有哪些
singleton-单例模式
prototype-原型模式
request-适用于WebApplicationContext,该属性仅对HTTP请求产生作用,使用该属性定义bean时,每次HTTP请求都会创建一个新的Bean
session-仅用于HTTP Session,同一个Session共享一个Bean实例,不同的Session使用不同的实例
global-session-仅用于HTTP Session,同session作用域不同的是,所有的Session共享一个Bean实例
6、spring的AOP底层实现原理
底层原理是动态代理,通过jdk原生或者cglib实现
aop是ioc的一个扩展功能,是在ioc的整个流程中的一个扩展点:BeanPostProcessor
总:aop是面向切面变成,应用场景是日志,事务等,通过动态代理(jdk,cglib)实现
分:bean的创建过程中有一个步骤可以对bean进行扩展实现,aop本身就是一个扩展功能,所以在BeanPostProcessor的后置处理方法中来进行实现
1.代理对象的创建过程(advice-通知,切面,切点)
2.通过jdk或者cglib生成代理对象
3.在执行方法调用的时候,会调用到生成的代理对象中,直接找到DynamicAdvisoredInterceptor类中的intercept方法,从此方法开始执行
4.根据之前定义好的通知来生成拦截器链
5.从拦截器链中依次获取每一个通知开始进行执行