面试八股文---SpringMVC

1.SpringMVC的执行流程是什么? 首先是SpringMVC的主要组件 前端控制器(DisatcherServlet):接收请求,响应结果,返回可以是json,String等数据类型,也可以是页面(Model)。 处理器映射器(HandlerMapping):根据URL去查找处理器,一般通过xml配置或者注解进行查找。 处理器(Handler):就是我们常说的controller控制器啦,由程序员编写。 处理器适配器(HandlerAdapter):可以将处理器包装成适配器,这样就可以支持多种类型的处理器。 视图解析器(ViewResovler):进行视图解析,返回view对象(常见的有JSP,FreeMark等)。 (1) 用户发送请求至前端控制器DispatcherServlet; (2)DispatcherServlet收到请求后,调用HandlerMapping处理器映射器,请求获取Handle; (3) 处理器映射器 根据请求url找到具体的处理器,生成 处理器对象 及 处理器拦截器(如果有则生成)一并返回给DispatcherServlet; (4)DispatcherServlet 调用 HandlerAdapter处理器适配器; (5)HandlerAdapter 经过适配调用具体处理器(Handler,也叫后端控制器); (6)Handler执行完成返回ModelAndView; (7)HandlerAdapter将Handler执行结果ModelAndView返回给DispatcherServlet; (8)DispatcherServlet将ModelAndView传给ViewResolver视图解析器进行解析; (9)ViewResolver解析后返回具体View; (10)DispatcherServlet对View进行渲染视图(即将模型数据填充至视图中) (11)DispatcherServlet响应用户。

2.SpringMVC的常用注解是什么? SpringMVC声明bean的注解: @Controller 用在表现层上 @Service 用在业务逻辑层上 @Repository 用在数据处理层上 DI: @Autowire @Qualifier @Resource @Value SpringMVC处理请求的注解: @ResponseBody 用于响应JSON数据 @RestController 相当于 @ResponseBody+@Controller,用于RESTful风格的请求处理 @RequestMapping 请求路径前缀 @GetMapping 接收Get请求 @PostMapping 接收Post请求 @PutMapping 接收Put请求 @DeleteMapping 接收Delete请求 @RequestBody 用于接收JSON数据 @RequesParam 接收Get请求的参数,或者做参数别名映射 @PathVariable 接收路径参数

3.SpringMVC的拦截器如何实现,在项目中哪里用到了? (1)定义一个拦截器类实现HandlerInterceptor接口并重写preHandle/postHandle/afterCompletion (2)添加SpringMVC配置类实现WebMvcConfigurer接口,重写addInterceptors方法,通过registry.addInterceptor注册拦截器并配置生效路径 在项目中我们使用拦截器获取请求头中包含的用户信息,并存储到ThreadLocal线程局部变量中,实现各层数据共享。

4.SpringMVC的如何处理异常? 可以将异常抛给Spring框架,由Spring框架来处理;我们只需要配置简单的异常处理器,在异常处理器中添加视图页面即可 基于@ControllerAdvance和@ExceptionHandler注解实现

5.项目中如何使用自动装配整合第三方API? 我们当时的项目采用的是微服务,在整合第三方技术的时候,在多个微服务都会使用到,以前是将第三方的API抽取成一个工具类来使用, 这个时候,这个工具类在多个微服务都存在,后期在维护的时候,每个工具类都需要进行维护,维护成本比较高 为了解决上述问题,我研究了springboot自动装配的底层实现,然后创建一个项目,在项目的META-INF下面添加spring.factories文件, 将配置类配置到文件中,在配置类中使用@Configuration+@Bean+@ConditionalOnXxx注解来进行对象的创建, 然后再使用@EnableConfigurationProperties引入配置类,配置类中使用@ConfigurationProperties读取springboot配置文件中的配置信息, 在其他微服务模块要想使用,就只需要导入依赖,添加配置,注入类来进行方法调用。

经验分享 程序员 微信小程序 职场和发展