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

2022-05-13 16:01:51 浏览数 (1)

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

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

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

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

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

二、springMVC的工作流程

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

三、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匹配。实例:

代码语言:javascript复制
@Resource(name="tiger",type="Monkey.class")

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

代码语言:javascript复制
@Autowired
@Qualifier("bmwCar")
private ICar car;

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

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

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

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

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

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

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

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

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

七、springMVC如何操作session?

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

代码语言:javascript复制
// 视图,官方推荐,这种可以把得到的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属性。

代码语言:javascript复制
<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>

九、在spring框架中,如何使用二级缓存?

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

代码语言:javascript复制
<!-- 开启二级缓存 -->
    <setting name="cacheEnabled" value="true"/>

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

代码语言:javascript复制
<?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"。

代码语言:javascript复制
<select id="login" resultType="User" useCache="true">
      select * from user where username=#{username}
  </select>

十、总结

以上就是一些常见的SpringMVC的面试题,AOP相关的是面试经常问到的,可以参考一下,阅读阅读,后面会不断更新相关知识,大家一起进步。

0 人点赞