SSM框架系列之SSM常见面试题总结(二)

本文详细介绍了Spring的依赖注入(DI)两种方式:构造器注入和setter注入,以及在实际开发中更常用的setter注入。接着,讲解了@RequestMapping注解在Spring MVC中的作用,用于映射URL到处理方法。此外,还阐述了SpringMVC如何实现重定向和转发,并探讨了MyBatis的一对多和多对一配置。最后,简要概述了MyBatis的工作原理,包括SqlSessionFactory、MappedStatement等核心概念。

8. Spring DI的几种方式?

(1)构造器注入:通过构造方法初始化

<constructor-arg name="dao"</constructor-arg>

(2)setter注入:通过setter方法初始化注入

<property name="dao" ref="dao2"></property>

注意:在实际开发中常用setter注入。

 

9. @RequestMapping注解用在类上面有什么作用?

该注解是用来映射一个URL到一个类或一个特定的方处理方法上。

 

10. SpringMVC怎么样设定重定向和转发的?

在返回值前面加 "forward:" 就可以让结果转发,比如:

forward:user.do?name=method4

在返回值前面加 "redirect:" 就可以让返回值重定向,比如:

redirect:http://www.uu456.com

 

11.  MyBatis怎么配置一对多?

一对多的关系 :property: 指的是集合属性的值,ofType:指的是集合中元素的类型。

 

12.  MyBatis怎样配置多对一?          

多对一的关系:

property:指的是属性的值;

javaType:指的是属性的类型。

 

13. 简单介绍下你对mybatis的理解?

(1)mybatis配置

(2)SqlMapConfig.xml,此文件作为mybatis的全局配置文件,配置了mybatis的运行环境等信息。

(3)mapper.xml文件即sql映射文件,文件中配置了操作数据库的sql语句。此文件需要在SqlMapConfig.xml中加载。

(4)通过mybatis环境等配置信息构造SqlSessionFactory即会话工厂

(5)由会话工厂创建sqlSession即会话,操作数据库需要通过sqlSession进行。

(6)mybatis底层自定义了Executor执行器接口操作数据库,Executor接口有两个实现,一个是基本执行器、一个是缓存执行器。

(7)Mapped Statement也是mybatis一个底层封装对象,它包装了mybatis配置信息及sql映射信息等。

mapper.xml文件中一个sql对应一个Mapped Statement对象,sql的id即是Mapped statement的id。

(8)Mapped Statement对sql执行输入参数进行定义,包括HashMap、基本类型、pojo,Executor通过Mapped Statement在执行sql前将输入的java对象映射至sql中,输入参数映射就是jdbc编程中对preparedStatement设置参数。

(9)Mapped Statement对sql执行输出结果进行定义,包括HashMap、基本类型、POJO,Executor通过Mapped Statement在执行sql后将输出结果映射至java对象中,输出结果映射过程相当于jdbc编程中对结果的解析处理过程。

 

14. SpringMVC是线程安全的吗?

SpringMVC是单例模式的框架,但它是线程安全的,因为springmvc没有成员变量,所有参数的封装都是基于方法的,属于当前线程的私有变量,因此是线程安全的框架。

 

到此,SSM框架系列的所有内容都已经总结完毕啦~

有兴趣的朋友可以点赞收藏关注我,让你在SSM框架中不在迷路~

### 关于SSM框架常见面试问题及答案 #### Spring MVC 控制器是否为单例模式及其影响 Spring MVC 的控制器默认采用单例模式[^1]。这意味着在整个应用程序生命周期中只有一个实例存在,所有请求都将共享这个唯一的控制器实例。 对于多线程环境下的应用来说,如果在控制器内部定义了成员变量,则可能会引发线程安全方面的问题。当多个客户端并发调用同一个接口时,这些成员变量可能被不同线程同时修改而导致数据混乱或者不一致的情况发生。 为了避免上述情况的发生,在设计基于Spring MVC的应用程序时应该遵循如下原则: - 不要在控制器类里声明任何非final类型的成员变量; - 如果确实需要保存某些状态信息可以考虑将其作为方法参数传递而不是存储到对象属性之中; 这样做不仅能够有效防止潜在的竞争条件出现,同时也使得代码更加清晰易懂易于维护。 ```java // 正确做法:避免使用成员变量 @RestController public class MyController { @GetMapping("/example") public String exampleMethod(@RequestParam String param){ // 处理业务逻辑... return "result"; } } ``` #### ViewResolver的作用与工作流程 `ViewResolver` 是用于将逻辑视图名称转换成实际物理路径下对应的JSP文件或其他模板引擎所使用的资源位置的服务组件[^2]。其主要职责包括但不限于以下几个方面: - 将由处理器返回的结果映射至具体页面地址上; - 创建相应的 `View` 对象以便后续执行渲染操作; - 把最终形成的HTML文档反馈给浏览器端显示出来; 通过配置不同的实现方式(如InternalResourceViewResolver),开发者可以根据项目需求灵活指定如何定位并呈现前端界面内容。 ```xml <!-- 配置 InternalResourceViewResolver --> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/views/"/> <property name="suffix" value=".jsp"/> </bean> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猿道

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值