TCL|【Java面试题】大厂面试必问的Spring 问题你来问,我来答!( 二 )


这样就有了父子之分 , 这样指责就更加清晰 , 子容器就负责 web 部分 , 父容器则是通用的一些 bean 。
也正是有了父子之分 , 如果有些人没把 controller 扫包的配置写在 spring-servlet.xml, 而写到了 service.xml 里 , 那就会把 controller 添加到父容器里 , 这样子容器里面就找不到了 , 请求就 404 了 。
当然 , 如果你把 services 和 repositories 添加到子容器是没影响的 , 不过没必要 , 分层还是比较好的方式 。
对了 , 子容器可以用父容器的 Bean , 父容器不能用子容器的 Bean 。
你了解的 Spring 都用到哪些设计模式工厂模式 , 从名字就看出来了 BeanFacotry 。
模板方法 , 什么 JdbcTemplate、RestTemplate。
代理模式 , AOP 整的都是代理 。
单例 , 这都不需要说了 。
责任链模式 , 比如拦截器  。
观察者模式 , Spring里的监听器  。
适配器模式...SpringMVC 提到的 handlerApdaper  。
太多啦...
Spring 事务有几个隔离级别从源码定义我们可以看到 , 一共有 5 种隔离级别 , 而 DEFAULT 就是使用数据库定义的隔离级别 。

其他几种分别是:读未提交、读已提交、可重复读、序列化 。
具体几个隔离级别的概念我就不介绍了 , 应该都很清楚 。
不清楚的看我这篇 MySQL 的文章:mysql总结 。
文章的后半段有写 。
Spring 有哪几种事务传播行为?从源码来看 , 一共有 7 种事务传播行为:

  • PROPAGATION_REQUIRED(默认) 如果当前存在事务 , 则用当前事务 , 如果没有事务则新起一个事务  。
  • PROPAGATION_SUPPORTS 支持当前事务 , 如果不存在 , 则以非事务方式执行  。
  • PROPAGATION_MANDATORY 支持当前事务 , 如果不存在 , 则抛出异常  。
  • PROPAGATION_REQUIRES_NEW 创建一个新事务 , 如果存在当前事务 , 则挂起当前事务  。
  • PROPAGATION_NOT_SUPPORTED 不支持当前事务 , 始终以非事务方式执行  。
  • PROPAGATION_NEVER 不支持当前事务 , 如果当前存在事务 , 则抛出异常  。
  • PROPAGATION_NESTED 如果当前事务存在 , 则在嵌套事务中执行 , 内层事务依赖外层事务 , 如果外层失败 , 则会回滚内层 , 内层失败不影响外层 。
Spring 事务传播行为有什么用?这题是群里有位小伙伴遇到的面试题 。
其实答案就几个字:控制事务的边界 。