首页 > 其他分享 >spring原理(第十三天)

spring原理(第十三天)

时间:2024-08-09 19:25:53浏览次数:20  
标签:初始化 spring class 参数 返回值 原理 方法 public 第十三天

WEB

RequestMappingHandlerMapping 与 RequestMappingHandlerAdapter 俩是一对,分别用来

  • 处理 @RequestMapping 映射

  • 调用控制器方法、并处理方法参数与方法返回值

DispatcherServlet 初始化

  1. DispatcherServlet 是在第一次被访问时执行初始化, 也可以通过配置修改为 Tomcat 启动后就初始化

  2. 在初始化时会从 Spring 容器中找一些 Web 需要的组件, 如 HandlerMapping、HandlerAdapter 等,并逐一调用它们的初始化

  3. RequestMappingHandlerMapping 初始化时,会收集所有 @RequestMapping 映射信息,封装为 Map,其中

    • key 是 RequestMappingInfo 类型,包括请求路径、请求方法等信息

    • value 是 HandlerMethod 类型,包括控制器方法对象、控制器对象

    • 有了这个 Map,就可以在请求到达时,快速完成映射,找到 HandlerMethod 并与匹配的拦截器一起返回给 DispatcherServlet

  4. RequestMappingHandlerAdapter 初始化时,会准备 HandlerMethod 调用时需要的各个组件,如:

    • HandlerMethodArgumentResolver 解析控制器方法参数

    • HandlerMethodReturnValueHandler 处理控制器方法返回值

自定义参数与返回值处理器

用来解析参数上带有@taken注解的参数

@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
public @interface Token {
}
public class TokenArgumentResolver implements HandlerMethodArgumentResolver {
    @Override
    // 是否支持某个参数
    public boolean supportsParameter(MethodParameter parameter) {
        Token token = parameter.getParameterAnnotation(Token.class);
        return token != null;
    }

    @Override
    // 解析参数
    public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer,
                                  NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {
        return webRequest.getHeader("token");
    }
}

用来解析方法上带有@yml注解的方法,并处理方法的返回值 

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Yml {
}
public class YmlReturnValueHandler implements HandlerMethodReturnValueHandler {
    @Override
    public boolean supportsReturnType(MethodParameter returnType) {
        Yml yml = returnType.getMethodAnnotation(Yml.class);
        return yml != null;
    }

    @Override                   //  返回值
    public void handleReturnValue(Object returnValue, MethodParameter returnType,
                                  ModelAndViewContainer mavContainer, NativeWebRequest webRequest) throws Exception {
        // 1. 转换返回结果为 yaml 字符串
        String str = new Yaml().dump(returnValue);

        // 2. 将 yaml 字符串写入响应
        HttpServletResponse response = webRequest.getNativeResponse(HttpServletResponse.class);
        response.setContentType("text/plain;charset=utf-8");
        response.getWriter().print(str);

        // 3. 设置请求已经处理完毕
        mavContainer.setRequestHandled(true);
    }
}

学到了什么
            a. DispatcherServlet 是在第一次被访问时执行初始化, 也可以通过配置修改为 Tomcat 启动后就初始化
            b. 在初始化时会从 Spring 容器中找一些 Web 需要的组件, 如 HandlerMapping、HandlerAdapter 等

        两个最为重要的组件
            a. RequestMappingHandlerAdapter, 以 @RequestMapping 作为映射路径
            b. RequestMappingHandlerAdapter, 调用 handler
            c. 控制器的具体方法会被当作 handler
                - handler 的参数和返回值多种多样
                - 需要解析方法参数, 由 HandlerMethodArgumentResolver 来做
                - 需要处理方法返回值, 由 HandlerMethodReturnValueHandler 来做
 

标签:初始化,spring,class,参数,返回值,原理,方法,public,第十三天
From: https://blog.csdn.net/GD2604279407/article/details/141057624

相关文章

  • 【数据结构】关于栈你必须知道的内部原理!!!
    前言:......
  • 回归预测|一种多输入多输出的粒子群优化支持向量机数据回归预测Matlab程序PSO-MSVR非f
    回归预测|一种多输入多输出的粒子群优化支持向量机数据回归预测Matlab程序PSO-MSVR非for循环实现原理上进行修改多输出文章目录前言回归预测|一种多输入多输出的粒子群优化支持向量机数据回归预测Matlab程序PSO-MSVR非for循环实现原理上进行修改多输出一、PSO-MSVR......
  • 从maven到SpringBootWeb入门
    Maven-SpringBootWeb入门maven安装安装步骤测试配置Maven环境当前工程全局IDEA创建Maven项目IDEA导入Maven项目依赖管理依赖配置依赖传递排除依赖 依赖范围生命周期Web入门SpringBootWeb快速入门HTTP协议请求协议响应协议Tomcat基本使用maven......
  • Spring 框架获取请求 IP
    在处理HTTP请求时,获取原始IP地址有时是必要的,特别是在反向代理或负载均衡器后面运行应用程序时。原始IP地址指的是客户端(用户)的IP地址,而不是代理服务器的地址。以下是几种获取原始IP地址的方法:1.使用HTTP头部-有时代理服务器会设置特定的HTTP头部,如`X-Forwarded-For`,来传......
  • Spring Cloud接入Nacos作为配置中心和服务发现
    一、nacos介绍Nacos是DynamicNamingandConfigurationService(动态命名和配置服务)的首字母简称,它是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。Nacos由阿里巴巴开源,致力于帮助用户发现、配置和管理微服务。以下是Nacos的详细介绍:动态服务发现:Nacos......
  • 京东面试:说说CMS工作原理?
    CMS(ConcurrentMarkSweep)垃圾收集器是以“最短的停顿”著称的垃圾回收器,因此也是JDK9之前使用最广泛的垃圾回收器之一。那么,问题来了,为什么CMS能实现最短停顿时间?CMS垃圾回收器的工作原理又是啥呢?接下来,我们一起来看。CMS工作原理CMS之所以能实现最短停顿时间是和它的......
  • React原理之React整体渲染流程
    前置知识:深度优先搜索(DFS)、Fiber节点在上一篇React原理篇之React整体架构解读中,提到了Fiber架构中的几个核心概念:Scheduler(调度器):根据任务的优先级安排任务执行顺序。Reconciler(协调器):根据新旧虚拟DOM树的差异确定需要更新的部分。Renderer(渲染器):将更新的虚拟......
  • Spring Boot 常见注解的用法和功能
    ​前言        SpringBoot提供了大量注解,主要用于简化配置和开发,大致可分为核心注解、Web注解、依赖注入注解、数据访问注解、配置注解、条件注解、测试注解。一、核心注解@SpringBootApplication        作用: 标注一个主程序类,表明这是一个SpringBoo......
  • SpringBoot日志的使用
    背景:在生产环境中,排程问题都是通过日志,所以日志很重要。日志有三个部分组成LoggerAppenderLayout一般日志都会有对应的配置文件,log4j2.xml或者是logback-spring.xml,日志的输出格式在Pattern标签中1、确认日志框架:确认日志框架是log4j2、logback还是其他的......
  • 相机成像原理
    https://mp.weixin.qq.com/s?__biz=MzU2NjU3OTc5NA==&mid=2247545276&idx=2&sn=458b782fadf8dda3b14100a375d82032&chksm=fca83681cbdfbf9782cdd89d3337bbf13c50ebccd711ec4ec5dc9b1ab7b5b3b7472d884ee044&scene=271.空间三维坐标系三维空间坐标系即世界坐标系,是一个绝对的坐标......