常见的SpringMVC的面试题,重点干货!!!

简介: 1、因为Spring使用了以下机制,通过容器控制所有Action对象和业务逻辑类的生命周期,由与上层不再控制下层的生命周期,层与层之间实现了完全脱耦,使程序运行起来效率更高,维护起来也方便。(1)、IOC(inversion of control) 控制反转模式:控制反转是将组件间的依赖关系从程序内部提到外部来管理,由容器控制程序之间的(依赖)关系,而非传统实现中,由程序代码直接操控。(2)、DI(dependency injection)依赖注入是指将组件的依赖通过外部以参数或其他形式注入;即组件之间的依赖关系由容器在运行期决定,由容器动态的将某种依赖关系注入到组件之中。

一、详述spring框架在SSM中起到的作用?

1、因为Spring使用了以下机制,通过容器控制所有Action对象和业务逻辑类的生命周期,由与上层不再控制下层的生命周期,层与层之间实现了完全脱耦,使程序运行起来效率更高,维护起来也方便。

(1)、IOC(inversion of control) 控制反转模式:控制反转是将组件间的依赖关系从程序内部提到外部来管理,由容器控制程序之间的(依赖)关系,而非传统实现中,由程序代码直接操控。

(2)、DI(dependency injection)依赖注入是指将组件的依赖通过外部以参数或其他形式注入;即组件之间的依赖关系由容器在运行期决定,由容器动态的将某种依赖关系注入到组件之中。

2、spring封装了所有对事务处理的功能,包括异常时事务回滚,操作成功时数据提交等复杂业务功能。通过AOP机制(面向切面编程)管理事务,避免了每次对数据操作都要现获得Session实例来启动、提交、回滚事务,以及繁琐的try/Catch操作,通过该机制,一方面使业务逻辑更清晰,专业分工更加容易进行,另一方面降低了程序的耦合性,做低侵入式的开发。也使我们可以在不同的应用中将各个切面结合起来使用,大大节省了代码量,提高代码的重用性。

二、springMVC的工作流程:

用一张图说明,从1到11.

image.png

三、spring的配置文件中主要有哪些内容?

1、配置数据源,数据库连接池(加载数据库属性文件)

2、配置Mapper扫描器(配置扫描Dao接口包)

3、配置事务管理器(配置传播行为)

4、配置切面

5、配置文件解析器

6、配置全局异常(运行时异常)

7、配置视图解析器

8、配置扫描业务层注解

9、静态资源访问的配置

四、spring有哪些注解,作用是什么?

1、@Controller 用于标记在一个类头上,表示该类是一个Controller对象

2、@RequestMapping是一个处理请求地址映射的注解,用在类或者方法上,表示响应以该路径作为父路径。

3、@Resource和@Autowired一起来介绍,他们有许多共通之处,也有细微的差别。

(1)相同点,都可以为类的属性,构造器,方法注值。均可标注在字段或者属性setter方法上。

(2),不同点是:@Autowired注解要去寻找的是一个Bean,如果属性找不到,不想让Spring容器抛出异常,就将@Autowired注解的required属性设置为false即可,它是spring的注解。@Resource是j2ee的注解,默认按照byName进行bean匹配。实例:

@Resource(name="tiger",type="Monkey.class")

!!!如果实现类有多个,此时可以在@Autowired注解下使用@Qualifier注解来指定bean的名字。或者使用@Resource,比如ICar中有多个实现类(bmwCar,accCar),我们可以这样指定。

@Autowired
@Qualifier("bmwCar")
private ICar car;

4、@RequestParam用于将请求参数区数据映射到功能处理方法的参数上。

5、@ResponseBody用于返回不经过视图解析器,不是页面,而是其他格式的数据。

6、@RestController:为了避免重复的写@RequestMapping与@ResponseBod,在类上添加,与@Controller类似,只为服务于JSON,XML或其它自定义的类型内容。

7、@Service标注业务层组件。

五、什么是AOP,为什么要用AOP?

image.png

是面向切面编程,通过动态代理,可以在指定位置执行对应流程。这样就可以将一些横向的功能抽离出来形成一个独立的模块,然后在指定位置插入这些功能,将日志记录,性能统计,安全控制,事务处理,异常处理等代码从业务逻辑代码中划分出来,通过对这些行为的分离,可以将它们独立到非指导业务逻辑的方法中,进而改变这些行为的时候不影响业务逻辑的代码,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。

六、springMVC是如何处理返回值的?

1、返回jsp的,经过视图解析器,跳转对应的页面。或者新建ModelAndView

2、返回json对象或者其他对象,在方法上加@RequestBody或者在该类上加@RestController,这样就不经过视图解析器。

七、springMVC如何操作session?

可以用HttpSession参数保存session数据。实例:

// 视图,官方推荐,这种可以把得到的list等带到前台,用el表达式表现出来,跟上面的差不多。  @RequestMapping("/model/{s}") // rest风格:数据量不大,不需要安全性。
public ModelAndView q(HttpServletRequest req, @PathVariable String s) {
  HttpSession session = req.getSession();           
    session.setAttribute("a", "aaa");
    ModelAndView m = new ModelAndView();    
    // m.addObject("a","张22三");//可以把参数带到前台    
m.setViewName("index");// 设置名字进入视图解析器   
 return m; 
  }  

八、mybities如何实现手动映射?

在mapping.xml中通过ResultMap自定义映射,在对应的sql中映射输出为ResultMap,要是只输出一个类或者字段,可以用resultType属性。

<resultMap type="RegRum" id="reg">  //调用时用的名字,唯一性    
<id property="patientid" column="patientid" /> //主键用id    
<result property="patientname" column="patientname"></result>   
 <result property="sex" column="sex" />     
 <result property="cardtype" column="cardtype" /> 
   <result property="cardid" column="cardid" />    
 <result property="socalnum" column="socalnum" /> 
    <result property="phone" column="phone" />    
 <result property="age" column="age" />    
 <result property="position" column="position" />  
   <result property="status" column="status" />    
 <result property="remark" column="remark" />    
 <result property="date" column="date" />   
  <association javaType="Doctor" property="doctor"> //连表      
 <id property="doctorid" column="doctorid"></id> //连表主键      
 <result property="dname" column="dname"></result>      
 <result property="subroomname" column="subroomname">
 </result>   
  </association>
 </resultMap>

九、在ssm框架中,如何使用二级缓存?分三步操作:

1、在全局配置文件中加入如下代码:即有标签里面

<!-- 开启二级缓存 -->   
 <setting name="cacheEnabled" value="true"/>

2、在需要开启二级缓存的mapping.xml中,添加。

<?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper
 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper
namespace="com.bdqn.jiankang.dao.UserDao"> 
   <cache></cache>

3、在需要二级缓存的sql语句标签上添加

useCache="true"。
<select id="login" resultType="User" useCache="true">      
select * from user where username=#{username}   
</select>
目录
相关文章
|
2月前
|
缓存 前端开发 Java
Spring MVC 面试题及答案整理,最新面试题
Spring MVC 面试题及答案整理,最新面试题
97 0
|
3月前
|
JSON 前端开发 Java
都说Spring MVC面试问烂了,可是很多人工作三年还是不懂!
大家找工作时,涉及框架面试问题时,常会被问及框架的原理及工作流程。所以本 Chat 通过带着大家一起来自己写一个 Struts2 框架(同理SpringMVC框架 ),亲身体验下框架的实现流程及工作原理!
31 0
|
3月前
|
前端开发 Java 程序员
Spring MVC面试题
Spring MVC是一个基于Java的实现了MVC设计模式的请求驱动类型的轻量级 Web框架,通过把模型-视图-控制器分离,将web层进行职责解耦,把复杂的 web应用分成逻辑清晰的几部分,简化开发,减少出错,方便组内开发人员之间的配合。
79 1
Spring MVC面试题
|
8月前
|
JSON 前端开发 Java
Spring MVC高频面试题总结,面试再也不怕了
Spring MVC高频面试题总结,面试再也不怕了
97 0
|
23天前
|
XML 前端开发 Java
SpringMvc面试题
SpringMvc面试题
|
9月前
|
Java
第一季:10简单的谈一下SpringMVC的工作流程【Java面试题】
第一季:10简单的谈一下SpringMVC的工作流程【Java面试题】
49 0
|
9月前
|
Java 应用服务中间件
第一季:9SpringMVC中如何解决POST请求中文乱码问题,GET的又如何处理呢【Java面试题】
第一季:9SpringMVC中如何解决POST请求中文乱码问题,GET的又如何处理呢【Java面试题】
40 0
|
9月前
|
JSON 前端开发 JavaScript
史上最全SpringMVC面试题(二)
史上最全SpringMVC面试题(二)
|
9月前
|
XML 存储 设计模式
史上最全SpringMVC面试题(一)
史上最全SpringMVC面试题(一)
|
10月前
|
XML 开发框架 Java
《Spring6核心源码解析》已完结,涵盖IOC容器、AOP切面、AOT预编译、SpringMVC,面试杠杠的!
全网首个全面解析Spring6核心源码的专栏,涵盖:IOC容器、AOP切面、声明式事务、AOT预编译和SpringMVC,让你从根本上彻底掌握Spring6核心技术。
322 1
《Spring6核心源码解析》已完结,涵盖IOC容器、AOP切面、AOT预编译、SpringMVC,面试杠杠的!