Spring 面试题(四)

目录

二十二、Spring AOP有哪些通知类型?

二十三、Spring 管理事务的方式有几种?

二十四、Spring 事务中有哪几种事务传播行为?

二十五、Spring 事务中有哪几种事务隔离级别?

二十六、Spring 事务在什么情况下会失效?

二十七、谈谈对Spring MVC的理解?

二十八、SpringMVC的工作原理(执行流程)?

二十九、SpringMVC的核心组件有哪些?


二十二、Spring AOP有哪些通知类型?(A)

关键字:分别介绍每种通知的实现接口,执行方式

  1. 前置通知:实现 MethodBeforeAdvice 接口,在目标方法调用前执行通知;
  2. 环绕通知:实现 MethodInterceptor 接口,是一个包围目标方法的通知。环绕通知可以在方法调用前后完成自定义的行为。
  3. 后置通知:实现 AfterReturningAdvice 接口,在在目标方法调用后执行通知(如果方法抛出异常,则不执行通知);
  4. 异常通知:实现 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)

  1. 数据库不支持事务
  2. 事务方法未被Spring管理
  3. 方法没有被Public修饰
  4. 同一类中方法调用
  5. 未配置事务管理器
  6. 方法的事务传播类型不支持事务
  7. 不支持的捕获异常
  8. 错误的标注异常类型

二十七、谈谈对Spring MVC的理解?

    首先,MVC模式模型(Model) 、视图( view )、控制器(contro1ler )的简写,其核心思想是通过将请求处理控制、业务逻辑、数据封装、数据显示等流程节点分离的思想来组织代码。

    所以,MVC 是一种设计模式,而 Spring MVC 是一款基于 MVC 设计模式思想实现的的 MVC 框架,属于Spring技术栈的一部分。Spring MVC可以帮助我们进行更简洁的 web 层的开发,并且它天生与 Spring 框架集成,更利于架构的设计与搭建。

二十八、SpringMVC的工作原理(执行流程)?

1.客户端(浏览器)发送请求,统一由 Dispatcherservlet 拦截处理请求。

2Dispatcherservlet 根据请求信息调用 HandlerMapping。HandlerMapping 根据URI(统一资源标识符)去匹配查找能处理的 Handler(也就是我们定义的 controller控制器),并会将请求涉及到的拦截器和 Handler 一起封装。

3.Dispatcherservlet调用HandlerAdapter适配执行Handler。

4.Handler完成对用户请求的处理后,会返回一个ModelAndview模型视图对象给 DispatcherservletModelAndview 中包含了数据模型以及相应的视图信息。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 响应至客户端。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冷酷无情小美

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值