Spring相关基础(下)
十八、什么是AOP?
AOP (Aspect Oriented Programing)
称为:面向切面编程,它是一种编程思想。在不修改原业务逻辑的情况下,对原有业务方法进行增强 !
十九、AOP和代理模式
代理模式:分为静态代理、JDK动态代理、cglib代理
1.静态代理:为每个目标对象手动生成代理类
2.jdk动态代理:必须有接口和实现类(目标类),从而生成代理对象,对目标类进行增强。
3.Cglib代理:Cglib代理不需要接口就可以生成代理类,所以目标类不能使用final修饰。 AOP Spring AOP通过代理的方式,对目标类进行增强。 Spring aop底层默认使用JDK动态代理,通过配置可以修改成cglib代理。
二十、AOP的运用?
1.事务
2.日志处理
3.缓存
4.权限控制
5.错误处理
链接:http://blog.sina.com.cn/s/blog_7045cb9e01010a9r.html
https://blog.youkuaiyun.com/qq513165077/article/details/78288999
二十一、Spring提供了几个关于事务处理的类?
Spring事务管理高层抽象主要包括3个接口,Spring的事务主要是由他们共同完成的:
PlatformTransactionManager:事务管理器—主要用于平台相关事务的管理
TransactionDefinition: 事务定义信息(隔离、传播、超时、只读)—通过配置确定如何进行事务管理。
TransactionStatus:事务具体运行状态—事务管理过程中,每个时间点事务的状态信息。
二十二、Spring什么情况下进行事务回滚?
有异常就会回滚
可以通过@Transactional(rollbackFor=Exception.class,notRollbackFor=RunTimeException.class)修改默认行为
rollbackFor用于设置那些异常将发生回滚
notRollbackFor用于设置那些异常不会发生回滚
二十三、谈谈Spring事务的隔离级别?
DEFAULT(默认):使用后端数据库默认的隔离级别(spring中的的选择项)
READ_UNCOMMITED(读未提交):允许你读取还未提交的改变了的数据。可能导致脏、幻、不可重复读
READ_COMMITTED(读已提交):允许在并发事务已经提交后读取。可防止脏读,但幻读和 不可重复读仍可发生
REPEATABLE_READ(可重复读):对相同字段的多次读取是一致的,除非数据被事务本身改变。可防止脏、不可重复读,但幻读仍可能发生。
SERIALIZABLE(串行化):完全服从ACID的隔离级别,确保不发生脏、幻、不可重复读。这在所有的隔离级别中是最慢的,它是典型的通过完全锁定在事务中涉及的数据表来完成的。
二十四、什么是事务的传播行为? 有什么作用?
事务传播行:多个事务方法相互调用时,事务如何在这些方法间传播
作用:事务的传播行为就是一个个的事务策略,根据需求、设备等条件选择对应的策略,从而完成需求或优化程序。
二十五、Spring事务控制放在service层,在service方法中一个方法调用service中的另一个方法,默认开启几个事务?
.只开启了一个事务,Spring默认的传播行为是PROPAGATION_REQUIRED,即如果当前存在事务,即加入该事务;如果当前没有事务,则新建一个新的事务。因此只开启了一个事务。
Spring事务的传播行为的7种类型
TransactionDefinition.PROPAGATION_REQUIRED:如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务。这是默认值。
TransactionDefinition.PROPAGATION_REQUIRES_NEW:创建一个新的事务,如果当前存在事务,则把当前事务挂起。
TransactionDefinition.PROPAGATION_SUPPORTS:如果当前存在事务,则加入该事务;如果当前没有事务,则以非事务的方式继续运行。
TransactionDefinition.PROPAGATION_NOT_SUPPORTED:以非事务方式运行,如果当前存在事务,则把当前事务挂起。
TransactionDefinition.PROPAGATION_NEVER:以非事务方式运行,如果当前存在事务,则抛出异常。
TransactionDefinition.PROPAGATION_MANDATORY:如果当前存在事务,则加入该事务;如果当前没有事务,则抛出异常。
TransactionDefinition.PROPAGATION_NESTED:如果当前存在事务,则创建一个事务作为当前事务的嵌套事务来运行;如果当前没有事务,则该取值等价于TransactionDefinition.PROPAGATION_REQUIRED。
二十六、介绍一下Spring的事务管理?
事务就是业务中的一组操作,要么全部成功,要么全部失败
Spring通过平台事务管理器(PlatformTransactionManager)进行事务管理
事务管理器通过事务定义(TransactionDefinition)进行具体的事务操作。
事务定义通过4方面对事务进行详细描述
1.readOnly:是否只读
2.timeout:超时时间
3.isolationLevel:事务隔离级别,隔离级别4种:读未提交、读已提交、可重复读、串行化
4.propagationBehavior:传播行为,共7种,常见的有:必须有事务 PROPAGATION_REQUIRED、每次必须新的 PROPAGATION_REQUIRES_NEW
二十七、Spring框架中都用到了哪些设计模式?
1.单例设计模式:spring 容器中 bean默认是单例的。
2.工厂模式:BeanFactory,是spring管理bean的核。
3.代理模式:AOP通过代理对目标类进行增强;
4.适配器模式:将一个类的接口变换成客户所期待的另一种接口,从而使原本不匹配而无法一起工作的俩个类能够在一起工作;SpringMVC中的适配器HandlerAdatper,HandlerAdatper根据不同的handler规则执行不同的handler;
5.模板方法模式:父类定义了骨架(调用哪些方法及顺序),某些特定方法由子类实现;在Spring的 JdbcTemplate,RestTemplate, JmsTemplate等地方使用了模板方法模式;
参考:https://blog.youkuaiyun.com/z69183787/article/details/65628166