第八章--SSM(SpringMVC+Spring+MyBatis)部分面试题复习

本文详述SSM(SpringMVC+Spring+MyBatis)面试重点,包括SpringMVC请求流程、Spring框架核心功能如IOC和AOP、Bean的作用域与生命周期,以及Mybatis的缓存机制和分页方法。内容涵盖SpringMVC的理解、Spring事务管理、Bean的注入方式、Mybatis的#{}与${}区别等关键知识点。
摘要由CSDN通过智能技术生成

本文回顾总结一下, 高频的一些SSM框架的面试题, 用作复习等使用!

1. SpringMVC

1.1 SpringMVC的理解

关键词 : 对Servlet的封装,屏蔽很多好用的细节;
比如 servlet,获取参数需要不断的getParameter,现在只要在SpringMVC⽅法定义对应的JavaBean,只要属性名与参数名⼀致,SpringMVC就可以帮我们实现「将参数封装到JavaBean」上了;
以前使⽤Servlet「上传⽂件」,需要处理各种细节,写⼀⼤堆处理的逻辑(还得导⼊对应的jar),现在在⼀个在SpringMVC的⽅法上定义出MultipartFile接⼝,⼜可以屏蔽掉上传⽂件的细节了。

SpringMVC 是一种基于 Java 语言开发,实现了 Web MVC 设计模式,请求驱动类型的轻量级 Web 框架。
采用了 MVC 架构模式的思想,通过把 ModelViewController 分离,将 Web 层进行职责解耦,从而把复杂的 Web 应用分成逻辑清晰的几个组件,在 Spring MVC 中有9 大重要的组件。

    下面详细说明一下这些组件的作用和初始化方法:
1MultipartResolver 文件处理器
	对应的初始化方法是 initMultipartResolver(context),用于处理上传请求。
2LocaleResolver 当前环境处理器
    其对应的初始化方法是 initLocaleResolver(context)
    SpringMVC 主要有两个地方用到了 Locale:
        一是 ViewResolver 视图解析的时候;
        二是用到国际化资源或者主题的时候。
3ThemeResolver 主题处理器
	其对应的初始化方法是 initThemeResolver(context)
    用于解析主题。 也就是解析样式、图片及它们所形成的显示效果的集合。
4HandlerMapping 处理器映射器
    其对应的初始化方法是 initHandlerMappings(context) ,
    在 SpringMVC 中会有很多请求,每个请求都需要一个 Handler 处理。
    HandlerMapping 的作用便是找到请求相应的处理器 HandlerInterceptor5HandlerAdapter 处理器适配器
    其对应的初始化方法是 initHandlerAdapters(context)
    从名字上看,它就是一个适配器。HandlerAdapters 要做的事情就是如何让固定的
    Servlet 处理方法调用灵活的 Handler 来进行处理
6HandlerExceptionResolver 异常处理器
    对应的初始化方法是 initHandlerExceptionResolvers(context)
    它的主要作用是处理其他组件产生的异常情况。
7RequestToViewNameTranslator 视图名称翻译器
    其对应的初始化方法是 initRequestToViewNameTranslator(context)
    它的作用是从请求中获取 ViewName。
    有的 Handler 处理完后并没有设置 View 也没有设置 ViewName,这时就需要从
    request 中获取,而 RequestToViewNameTranslator 就是为 request 提供获取
    ViewName 的实现。
8ViewResolvers 页面渲染处理器
    其对应的初始化方法是 initViewResolvers(context)
    ViewResolvers 的主要作用是将 String 类型的视图名和 Locale 解析为 View 类型的视图。
9FlashMapManager 参数传递管理器
    其对应的初始化方法是 initFlashMapManager(context)
    在实际应用中,为了避免重复提交,我们可以在处理完 post 请求后重定向到另外一个
    get 请求,这个 get 请求可以用来返回页面渲染需要的信息。
    FlashMap 就是用于这种请求重定向场景中的参数传递。

而以上九大组件中,涉及到请求处理响应核心组件有:
    1. HandlerMapping2. HandlerAdapter3. ViewResolver
    具体执行步骤如下:
        1HandlerMapping 回到调用 HandlerAdapter
        2HandlerAdapter 会返回 ModelAndView
        3ModelAndView 根据用户传入参数得到 ViewResolvers
        4ViewResolvers 会将用户传入的参数封装为 View,交给引擎进行渲染。

:::info
注意 : ModelAndView 和 View 类不属于九大组件;
:::

1.2 SpringMVC请求流程

image.png
image.png
统⼀的处理⼊⼝,对应SpringMVC下的源码是在DispatcherServlet下实现的,该对象在初始化就会把映射器、适配器、视图解析器、异常处理器、⽂件处理器等等给初始化掉,初始哪些对象主要看配置文件;
DispatcherServlet(⼊⼝)->DispatcherServlet.properties(会初始化的对象)->HandlerMapping(映射器)->HandlerExecutionChain(映射器+拦截器List) ->HttpRequestHandlerAdapter(适配器)-> HttpMessageConverter(数据转换)

2. Spring基础

2.1 为什么用Spring框架

Spring 是一个轻量级应用框架,它提供了 IoC 和 AOP 这两个核心的功能。
核心目的是为了简化企业级应用程序的开发,使得开发者只需要关心业务需求,不需要关心 Bean 的管理,以及通过切面增强功能减少代码的侵入性。

  • 轻量:Spring 是轻量的,基本的版本大约 2MB。非侵入式
  • IOC/DI:Spring 通过 IOC 容器实现了 Bean 的生命周期的管理,以及通过 DI 实现依赖注入,从而实现了对象依赖的松耦合管理。
  • 面向切面的编程(AOP):Spring 支持面向切面的编程,从而把应用业务逻辑和系统服务分开。
  • MVC 框架:Spring MVC 提供了功能更加强大且更加灵活的 Web 框架支持
  • 事务管理:Spring 通过 AOP 实现了事务的统一管理,对应用开发中的事务处理提供了非常灵活的支持

Spring框架的生态非常庞大,业务开发领域,提供非常完善的支持,且社区活跃度和技术成熟度非常高。

2.2 IOC和AOP的理解

Spring IOC 解决的是对象管理和对象依赖的问题。
本来是我们⾃⼰⼿动new出来的对象,现在则把对象交给Spring的IOC容器管理
IOC容器可以理解为⼀个对象⼯⼚,我们都把该对象交给⼯⼚,⼯⼚管理这些对象的创建以及依赖关系
等我们需要⽤对象的时候,从⼯⼚⾥边获取就好了;

控制反转」指的就是:把原有⾃⼰掌控的事交给别⼈去处理,它更多的是⼀种思想或者可以理解为设计模式;⽐如:本来由我们⾃⼰new出来的对象,现在交由IOC容器,把对象的控制权交给它⽅了;
⽽「依赖注⼊」在我的理解下,它其实是「控制反转」的实现⽅式
对象⽆需⾃⾏创建或者管理它的依赖关系,依赖关系将被「⾃动注⼊」到需要它们的对象当中去

IOC 主要的好处在于「将对象集中统⼀管理」并且「降低耦合度」
享受单例 单元测试 屏蔽对象创建 一套对Bean生命周期的扩展
我⽤Spring IOC 可以⽅便 单元测试、对象创建复杂、对象依赖复杂、单例等等的,什么都可以交给Spring IOC
理论上⾃⼰new出来的都可以解决上⾯的问题,Spring在各种场景组合下有可能不是最优解,
但new出来的你要⾃⼰管理,可能你得⾃⼰写⼯⼚,得实现⼀⼤套的东⻄才能满⾜需求
并且Spring核⼼不仅仅IOC啊,除了把对象创建出来,还有⼀整套的Bean⽣命周期管理

Spring AOP 解决的是 ⾮业务代码抽取的问题,AOP 底层的技术是动态代理,在Spring内实现依赖的是BeanPostProcessor
⽤AOP来对我们公司现有的监控客户端进⾏封装,⼀个系统离不开监控,监控基本的指标有QPS、RT、ERROR等等,对外暴露的监控客户端只能在代码⾥写对应的上报信息(灵活,但会与业务代码掺杂在⼀起),利⽤注解+AOP的⽅式封装了⼀把,只要⽅法/类上带有我⾃定义的注解,⽅法被调⽤时,就会上报AQS、RT等信息,实现了⾮业务代码与业务代码分离的效果

2.3 IOC工作流程


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值