1.说说⾃⼰对于 Spring MVC 了解?
- 客户端(浏览器)发送请求,直接请求到 DispatcherServlet 。
- DispatcherServlet 根据请求信息调⽤ HandlerMapping ,解析请求对应的 Handler 。
- 解析到对应的 Handler (也就是我们平常说的 Controller 控制器)后,开始由 HandlerAdapter 适配器处理。
- HandlerAdapter 会根据 Handler 来调⽤真正的处理器开处理请求,并处理相应的业务逻 辑。
- 处理器处理完业务后,会返回⼀个 ModelAndView 对象, Model 是返回的数据对 象, View 是个逻辑上的 View 。
- ViewResolver 会根据逻辑 View 查找实际的 View 。
- DispaterServlet 把返回的 Model 传给 View (视图渲染)。
- 把 View 返回给请求者(浏览器)
2.Spring 框架中⽤到了哪些设计模式?
⼯⼚设计模式 : Spring使⽤⼯⼚模式通过 BeanFactory 、 ApplicationContext 创建 bean 对 象。
代理设计模式 : Spring AOP 功能的实现。
单例设计模式 : Spring 中的 Bean 默认都是单例的。
包装器设计模式 :我们的项⽬需要连接多个数据库,⽽且不同的客户在每次访问中根据需要会去访问不同的数据库。这种模式让我们可以根据客户的需求能够动态切换不同的数据源。
观察者模式: Spring 事件驱动模型就是观察者模式很经典的⼀个应⽤。
适配器模式 :Spring AOP的增强或通知(Advice)使⽤到了适配器模式、spring MVC 中也是⽤到了适配器模式适配 Controller 。
3.Spring 管理事务的⽅式有⼏种?
- 编程式事务,在代码中硬编码。(不推荐使⽤)
- 声明式事务,在配置⽂件中配置(推荐使⽤)
4.Spring 事务中的隔离级别有哪⼏种?
TransactionDefinition.ISOLATION_DEFAULT: 使⽤后端数据库默认的隔离级别,Mysql 默认采⽤的REPEATABLE_READ隔离级别 Oracle 默认采⽤的 READ_COMMITTED隔离级别
TransactionDefinition.ISOLATION_READ_UNCOMMITTED: 最低的隔离级别,允许读取尚未提交的数据变更,可能会导致脏读、幻读或不可重复读
TransactionDefinition.ISOLATION_READ_COMMITTED: 允许读取并发事务已经提交的数据,可以阻⽌脏读,但是幻读或不可重复读仍有可能发⽣
TransactionDefinition.ISOLATION_REPEATABLE_READ: 对同⼀字段的多次读取结果 都是⼀致的,除⾮数据是被本身事务⾃⼰所修改,可以阻⽌脏读和不可重复读,但幻读仍有 可能发⽣。
TransactionDefinition.ISOLATION_SERIALIZABLE: 最⾼的隔离级别,完全服从ACID的 隔离级别。所有的事务依次逐个执⾏,这样事务之间就完全不可能产⽣⼲扰,也就是说,该级别可以防⽌脏读、不可重复读以及幻读。但是这将严重影响程序的性能。通常情况下也不 会⽤到该级别
5.Spring 事务中哪⼏种事务传播⾏为?
⽀持当前事务的情况: TransactionDefinition.PROPAGATION_REQUIRED:
如果当前存在事务,则加⼊该事务;如果当前没有事务,则创建⼀个新的事务。TransactionDefinition.PROPAGATION_SUPPORTS:
如果当前存在事务,则加⼊该事务;如果当前没有事务,则以⾮事务的⽅式继续运⾏。TransactionDefinition.PROPAGATION_MANDATORY:
如果当前存在事务,则加⼊该事务;如果当前没有事务,则抛出异常。(mandatory:强制性)
不⽀持当前事务的情况: TransactionDefinition.PROPAGATION_REQUIRES_NEW:
创建⼀个新的事务,如果当前存在事务,则把当前事务挂起。TransactionDefinition.PROPAGATION_NOT_SUPPORTED:
以⾮事务⽅式运⾏,如果当前存在事务,则把当前事务挂起。 TransactionDefinition.PROPAGATION_NEVER:
以⾮事务⽅式运⾏,如果当前存在事务,则抛出异常
其他情况:
TransactionDefinition.PROPAGATION_NESTED: 如果当前存在事务,则创建⼀个事务
作为当前事务的嵌套事务来运⾏;如果当前没有事务,则该取值等价于
TransactionDefinition.PROPAGATION_REQUIRED。