1、问?)Spring、SpringMVC和Springboot的区别
背景!
相关概念
2、问?)SpringMVC的请求过程?
------------问题:
a、典型的应用程序中可能会有多个控制器,这些请求到底应该发给哪一个控制器呢?
DispatcherServlet会查询一个或多个处理器映射来确定请求的下一站在哪里,处理器映射会根据请求所携带的URl 信息来进行决策。
b、SpringMVC的控制器是不是单例模式?如果是,有什么问题?怎么解决?
是单例模式,所以在多线程访问的时候有线程安全问题,注意不要用同步,会影响性能,解决方案是在控制器里面不能写字段
3、问?)Spring中运用了哪些设计模式?
-
工厂模式: Spring使用工厂模式通过
BeanFactory
、ApplicationContext
创建 bean 对象。 -
代理模式: Spring AOP 功能的实现。
-
单例模式: Spring 中的 Bean 默认都是单例的。
-
模板方法模式: Spring 中
jdbcTemplate
、hibernateTemplate
等以 Template 结尾的对数据库操作的类,它们就使用到了模板模式。 -
包装器设计模式: 我们的项目需要连接多个数据库,而且不同的客户在每次访问中根据需要会去访问不同的数据库。这种模式让我们可以根据客户的需求能够动态切换不同的数据源。
-
**观察者模式:**Spring 事件驱动模型就是观察者模式很经典的一个应用。
-
适配器模式:Spring AOP 的增强或通知(Advice)使用到了适配器模式、spring MVC 中也是用到了适配器模式适配
Controller
。 -
……
4、问?)事务的传播属性有哪些?
事务的属性
1 propagation用来设置事务的传播行为
事务的传播行为:一个方法运行在了一个开启事务的方法中,当前方法是使用依附的方法事务还是使用自身的事务
Propagation.REQUIRED默认值 使用其依附的别人方法的事务
Propagation.REQUIRES_NEW 将原来的事务挂起 开启一个新的事务(即执行自身的事务)
使用方法 在需要使用事务的方法上加注解 @Transactional 什么都不加默认为Propagation.REQUIRED
若想开启新事务执行自己的事务则可以在方法上加@Transactional(propagation=Propagation.REQUIRES_NEW)
2 isolation用来设置事务的隔离级别
Oracle支持的事务隔离级别为
- 默认读已提交read committed
- 串行化 serializable
Mysql支持所有的事务隔离级别
- 读未提交 read uncommitted
- 读已提交 read commited
- (默认)可重复读 repeatable read
- 串行化 serializable
同传播行为一样 也是在注解@Transaction()中添加 (isolation=Isolation.DEFAULT)
SQL Server默认系统事务隔离级别是
- read committed,读已提交
Spring事务七大传播机制与五个隔离级别
5、问?)事务的隔离机制有哪些?
问?7、)说说Struts2和SpringMVC的区别
- SpringMVC的入口是一个servlet,即前端控制器,而struts2入口是一个filter过滤器
- SpringMVC是基于方法开发(一个url对应一个方法),请求参数传递到方法的形参,可以设计为单例或者多例(建议单例),Struts2基于类开发,传递参数是通过类的属性,只能设计为多例
- Struts2采用值栈存储请求和相应的数据,通过OGNL存取数据,SpringMVC通过参数解析器将request 请求内容解析,并给方法形参赋值,将数据个视图封装成ModelAndView对象,最后将ModelAndView中的模型数据通过request域传输到页面,JSP视图解析器默认使用jstl