目录
二十二、Spring AOP有哪些通知类型?(A)
关键字:分别介绍每种通知的实现接口,执行方式
- 前置通知:实现 MethodBeforeAdvice 接口,在目标方法调用前,执行通知;
- 环绕通知:实现 MethodInterceptor 接口,是一个包围目标方法的通知。环绕通知可以在方法调用前后完成自定义的行为。
- 后置通知:实现 AfterReturningAdvice 接口,在在目标方法调用后,执行通知(如果方法抛出异常,则不执行通知);
- 异常通知:实现 ThrowsAdvice 接口,在方法抛出异常时,执行通知;
二十三、Spring 管理事务的方式有几种?
1.编程式事务: 在代码中硬编码(不推荐使用):
通过TransactionTemplate 或者 TransactionManager 手动管理事务,实际应用中很少使用,用于理解 Spring 事务管理。
2.声明式事务: 在 XML 配置文件或者基于注解 @Transactional(推荐使用),通过AOP 实现。
二十四、Spring 事务中有哪几种事务传播行为?(A)
事务传播行为是为了解决业务层方法之间互相调用时,产生事务问题
当事务方法被另一个事务方法调用时,必须指定事务应该如何传播。例如:方法可能继续在现有事务中运行,也可能开启一个新事务,并在自己的事务中运行。
事务传播行为有如下分类:
1.TransactionDefinition.PROPAGATION_REQUIRED
如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务。@Transactional 注解默认使用的事务传播行为。
2.TransactionDefinition.PROPAGATION_REQUIRES_NEW
创建一个新的事务,如果当前存在事务,则把当前事务挂起。也就是说不管外部方法是否开启事务,Propagation.REQUIRES_NEW 修饰的内部方法会新开启自己的事务,且开启的事务相互独立,互不干扰。
3.TransactionDefinition.PROPAGATION_NESTED
如果当前存在事务,则创建一个事务作为当前事务的嵌套事务来运行;如果当前没有事务,则该取值等价于TransactionDefinition.PROPAGATION_REQUIRED
4.TransactionDefinition.PROPAGATION_MANDATORY
如果当前存在事务,则加入该事务;如果当前没有事务,则抛出异常。(mandatory:代表强制性)
5.TransactionDefinition.PROPAGATION_SUPPORTS
如果当前存在事务,则加入该事务;如果当前没有事务,则以非事务的方式继续运行。
6.TransactionDefinition.PROPAGATION NOT_SUPPORTED
以非事务方式运行,如果当前存在事务,则把当前事务挂起。7.TransactionDefinition.PROPAGATION_NEVER
以非事务方式运行,如果当前存在事务,则抛出异常。
二十五、Spring 事务中有哪几种事务隔离级别?(A)
1.TransactionDefinition.ISOLATION_DEFAULT 默认隔离级别
使用当前数据库的默认隔离级别,MySQL默认采用的是可重复读REPEATABLE_READ 隔离级别。0racle 默认采用的是读已提交READ_COMMITTED隔离级别
2.TransactionDefinition.ISOLATION_READ_UNCOMMITTED 读未提交
最低的隔离级别,允许读取尚未提交的数据变更,可能会导致脏读、幻读或不可重复读3.TransactionDefinition.ISOLATION_READ_COMMITTED 读已提交
允许读取并发事务已经提交的数据,可以阻止脏读,但是幻读或不可重复读仍有可能发生
4.TransactionDefinition.ISOLATION_REPEATABLE_READ 可重复读
对同一字段的多次读取结果都是一致的,除非数据是被本身事务自己所修改,可以阻止脏读和不可重复读,但幻读仍有可能发生。
5.TransactionDefinition.ISOLATION_SERIALIZABLE 串行化
最高的隔离级别,完全服从ACID的隔离级别。所有的事务依次逐个执行,这样事务之间就完全不可能产生干扰,也就是说,该级别可以防止脏读、不可重复读以及幻读。但是这将严重影响程序的性能。通常情况下也不会用到该级别。
二十六、Spring 事务在什么情况下会失效?(A)
- 数据库不支持事务
- 事务方法未被Spring管理
- 方法没有被Public修饰
- 同一类中方法调用
- 未配置事务管理器
- 方法的事务传播类型不支持事务
- 不支持的捕获异常
- 错误的标注异常类型
二十七、谈谈对Spring MVC的理解?
首先,MVC模式是模型(Model) 、视图( view )、控制器(contro1ler )的简写,其核心思想是通过将请求处理控制、业务逻辑、数据封装、数据显示等流程节点分离的思想来组织代码。
所以,MVC 是一种设计模式,而 Spring MVC 是一款基于 MVC 设计模式思想实现的的 MVC 框架,属于Spring技术栈的一部分。Spring MVC可以帮助我们进行更简洁的 web 层的开发,并且它天生与 Spring 框架集成,更利于架构的设计与搭建。
二十八、SpringMVC的工作原理(执行流程)?
1.客户端(浏览器)发送请求,统一由 Dispatcherservlet 拦截处理请求。
2.Dispatcherservlet 根据请求信息调用 HandlerMapping。HandlerMapping 根据URI(统一资源标识符)去匹配查找能处理的 Handler(也就是我们定义的 controller控制器),并会将请求涉及到的拦截器和 Handler 一起封装。
3.Dispatcherservlet调用HandlerAdapter适配执行Handler。
4.Handler完成对用户请求的处理后,会返回一个ModelAndview模型视图对象给 Dispatcherservlet 。ModelAndview 中包含了数据模型以及相应的视图信息。Model是返回的数据对象,View 是view视图的逻辑名称。
5.ViewResolver 会根据逻辑View名称査找并解析实际的View视图文件,并根据 Dispaterservlet 返回的 Model 数据模型传给 view 视图文件,进行渲染执行,产生响应结果。
6.Dispaterservlet 负责将响应结果,输出至客户端浏览器。
二十九、SpringMVC的核心组件有哪些?
Dispatcherservlet:核心处理器,负责统一接收请求、将请求分发至不同的控制器,并负责客户端响应。
HandlerMapping:处理器映射器,根据 uri 去匹配査找能处理的 Handler ,并会将请求涉到的拦截器和 Handler 一起封装。
HandlerAdapter:处理器适配器,根据 HandlerMapping 找到的 Handler适配执行对应的 Handler;
Handler:请求处理器,处理实际请求的处理器。
ViewResolver:视图解析器,根据 Handler 返回的逻辑视图名称,解析并渲染真正的视图文件,并传递给 Dispatcherservlet 响应至客户端。