目录
1.Spring Bean的作用域之间有什么区别
在Spring中。可以设置<bean>元素的scope属性来设置bean的作用域,若不设置,作用域默认是是singleton,Bean以实例的方式存在,除了singleton,还有以下几种类别:
如何设置:
singleton是在IOC容器创建的时候就创建这个唯一的bean实例(类比于单例模式中的类变量/静态变量),而protptype在IOC容器创建时不再创建对象,而是在调用getBean时才创建,每次getBean都创建一个新的,自然不是单例的了。
request:每次HTTP请求创建Bean
session:同一个seesion共享同一个,不用session使用不同的Bean
2.Spring常用的数据库传播事务属性和事务的隔离级别
一、传播事务属性:
情景:用户表中某个用户存款100,书表中第一本书60元,第二本书50元,那么当用户想要买这两本书时,显然钱是不够的,直接购买会发生错误,为此我们给两个方法加了事务,一个是【买单(要买的书目list)】,一个是【购买一本书(书id)】,在【买单()】中调用【购买一本书()】,那么当发起来要买单的请求,他是会两本都买不了,还是只买一本呢?
我们都知道事务具有原子性,当一个事务中有某个部分执行失败,则会回滚,全部不执行,如果是用【买单()】方法的事务,则一本也买不成,如果是以【购买一本书()】方法的事务,则还能买成一本。
当事务方法被另一个事务方法调用时,必须指定事务应该如何传播。例如:方法可能继续在现有事务中进行,也可能开启一个新事物,在自己的事务中运行。事务的传播行为通过传播属性制定,Spring定义了七种类传播行为,在@Tansactional(propagation="...")中设置:
例如:Required表示在原有的事务中运行,不启动新的事务,那么就在【买单】事务进行,最后一本也买不了
同理,Requires_new表示新开启事务,那么就在【购买一本】这个自己的事务中执行,会先把【买单事务挂起】->【运行购买第一本事务】->【买单事务】->【买单事务挂起】->【购买第二本事务】->【买单事务】
二、事务隔离级别
首先:数据库并发可能存在哪些问题?
- 1、脏读(未提交)
- 2、不可重复读(已提交)
- 3、幻读(已提交)
具体如下:
其次,有哪些隔离级别:
怎么设置:
开发中一般用读已提交(第二个),读一个值,然后这个值被改了,再读它,读出来的是更新后的值
如果到第三个,可重复读,读一个值,然后这个值被改了,再读它,读出来的还是更新前的,重复的
第二个就可以解决脏读的问题了,不是级别越高越好,因为效率也跟着下降。
3.SpringMVC处理post和get中文乱码问题
- 解决Post请求乱码问题:
过滤器:
映射:
- 解决Get请求乱码问题:
到Servers->server.xml->第一个Connector加上:URIEncoding="UTF-8"
4.简述SpringMVC的工作流程
5.Mybatis实体类属性名和数据库字段名不一致怎么办
其中第二:
其中第三: