第一章:Spring流程执行步骤

news2025/8/1 18:11:57

Spring执行流程图

注意观察:每一个执行步骤的结果都会返回到DispatcherServlet ,然后再出发调用,
所以是请求接口的入口也是出口。
在这里插入图片描述

简单了解几个大类的走的流程和具体功能

DispatcherServlet 类

中文调度应用程序,而Servlet就是被调用的对象,中央调度员处理员,是中枢。
通俗讲:就是接收客户端发送请求,然后再进行响应给客户端。
这中间执行的过程都是通过这个类去调用接口HandlerMapping、HandlerAdapter找他们的实现方法,
来完成从请求到响应的过程的。
响应的形式形式是多样的。
 DispatcherServlet 是前置控制器,配置在web.xml文件中的。拦截匹配的请求,
 Servlet拦截匹配规则要自己定义,把拦截下来的请求,
 依据相应的规则分发到目标Controller来处理,是配置spring MVC的第一步。

HandlerMapping 接口

通过HandlerMapping,将请求映射到处理器(返回一个HandlerExecutionChain,
它包括一个处理器、多个HandlerInterceptor拦截器其中是包含的是可以请求的和不可以请求的
就是黑名单和白名单);

HandlerExecutionChain 类

主要甄别 白名单还是黑名单访问请求接口,黑名单拒绝
主要执行的是在接口@Controller 方法前、中、后执行的方法
在RequestMappingHandlerAdapter 内的
执行addInterceptors 目的是将我们配置好的应该处理和拦截的接口集合添加到源码的集合中
1.而预处理就会穿插在这个地方,主要是处理接口方法的前,中,后执行的方法,比如session登录就适合在preHandle前提是某个类实现了HandlerInterceptor接口preHandle才生效,然后再 implements WebMvcConfigurer,
实现注入接口list中
2.(两个list,一个list是处理接口,一个lists是不处理的就是拦截器(本质是数组))在已经注册到处理器中查询请求是否在其中

HandlerAdapter

寻找具体@Controller接口处理程序 Handler
1.适配器   源码中是根据请求的接口,遍历已经被注册到接口集合中元素,寻找和请求接口一样的接口对象,然后返回集合元素中此接口,为的就是找集合元素中的接口实现方法
由此找到对应的适配器,也就是我们代码中具体的@control层中RequestMapping(),面向接口编程。
2.装配工作,在找到对应接口的时候,会根据接口注解@Autowired进行装配其具体哪个@Service

InternalResourceViewResolver

主要作用是视图解析器,解析具体的view视图,就是解析具体返回的哪个页面

InvocableHandlerMethod

解析、转换、执行、返回数据视图的核心方法
利用 RequestMappingHandlerAdapter 中的 invokeHandlerMethod 方法可以调用 HandlerMethod
就是将请求处理完成后的结果进行如何行成展示的过程

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

DispatcherServlet

目的:行程闭环
从DispatcherServlet开始,接收请求,响应请求,并回到DispatcherServlet这儿出口返回客户端。
都是以DispatcherServlet为基础,进行四处奔波,最后回到客户端

注意观察:每一个执行步骤的结果都会返回到DispatcherServlet ,然后再出发调用,
所以是请求接口的入口也是出口。

分析几个接口的具体实现类

HandlerMapping 和 RequestMappingHandlerMapping 关系

后者实现前者接口进行将类中含有注解是RequestMapping进行注册到bean中,
就是放在容器中,行成映射Map关系,等待web请求映射调用

HandlerAdapter 和 RequestMappingHandlerAdapter 关系

RequestMappingHandlerAdapter 实现前者寻找具体@Controller接口
RequestMappingHandlerAdapter被包装成适配器,适合多种请求的处理,
调用控制器方法、并处理方法参数与方法返回值

另外补充采用非xml方式实现

WebMvcConfigurer 接口

采用实现WebMvcConfigurer接口的形式
根本目的:尽可能代替传统的xml文件的Javabean注册配置的形式
需要实现此接口类添加注解 @Configuration 
@Configuration注解表明这个类是一个配置类。
可以启动组件扫描,用来将带有@Bean的实体进行实例化bean等
实现此接口可以定义请求访问规则,定义拦截器和预处理机制
1.addInterceptors:拦截器
2.addViewControllers:页面跳转
3. addResourceHandlers:静态资源
4. configureDefaultServletHandling:默认静态资源处理器
5. configureViewResolvers:视图解析器
6. configureContentNegotiation:配置内容裁决的一些参数
7. addCorsMappings:跨域
8. configureMessageConverters:信息转换器

点解连接

第二章:Spring核心思想和IOC和AOP依赖注入

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/16134.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

libusb系列-007-Qt下使用libusb1.0.26源码

libusb系列-007-Qt下使用libusb1.0.26源码 文章目录libusb系列-007-Qt下使用libusb1.0.26源码摘要安装编译环境确认需要的文件开始编译错误1:找不到文件错误2:expected错误3:SCM_CREDENTALS错误4:类型冲突错误5 assert断言错误错误…

低代码平台和无代码平台有什么区别

低代码(LowCode)/无代码(NoCode)”是技术界近几年的热门词汇之一,随着企业数字化发展的深入,越来越多的场景化需求要求企业具备更加灵活敏捷的应用开发能力,传统应用开发模式周期长、技术人员能力要求高,无…

OWASP API SECURITY TOP 10

目录 1. API 安全风险 2. 细说TOP10 1. Broken Object Level Authorization 2. Broken User Authentication 3 Excessive Data Exposure 4 Lack of Resources & Rate Limiting 5 Broken Function Level Authorization 6 Mass Assignment 7 security misconfigura…

redis哨兵系列1

需要配合源码一起康~ 9.1 哨兵基本概念 官网手册yyds:https://redis.io/docs/manual/sentinel/ redis主从模式,如果主挂了,需要人工将从节点提升为主节点,通知应用修改主节点的地址。不是很友好,so Redis 2.8之后开…

同花顺_代码解析_技术指标_EJK

本文通过对同花顺中现成代码进行解析,用以了解同花顺相关策略设计的思想 目录 EMV ENV EXPMA JF_ZNZX KD KDJ KDJFS EMV 简易波动指标 1.EMV 由下往上穿越0 轴时,视为中期买进参考信号; 2.EMV 由上往下穿越0 轴时,视为中…

根据以下电路图,补全STM32F103RCT6的IO口初始化程序

void KEY_Init(void)//接按键的端口初始化程序 { RCC->APB2ENR|______________; //使能PORTA时钟 JTAG_Set(SWD_ENABLE); GPIOA->CRL&__________________; // PA3设置成下拉输入 GPIOA->CRL|__________________; } void LED_Init(void)//接LED的端…

【Qt】控件探幽——QLineEdit

注1:本系列文章使用的Qt版本为Qt 6.3.1 注2:本系列文章常规情况下不会直接贴出源码供复制,都以图片形式展示。所有代码,自己动手写一写,记忆更深刻。 本文目录QLineEdit探幽1、设置数据/获取数据2、只读(re…

【15-项目中服务的远程调用之OpenFeign订单模块与商品模块集成使用OpenFeign的案例】

一.知识回顾 【0.三高商城系统的专题专栏都帮你整理好了,请点击这里!】 【1-系统架构演进过程】 【2-微服务系统架构需求】 【3-高性能、高并发、高可用的三高商城系统项目介绍】 【4-Linux云服务器上安装Docker】 【5-Docker安装部署MySQL和Redis服务】…

【面试题】圣杯布局和双飞翼布局

圣杯布局和双飞翼布局的特点: 三栏布局,中间一栏最先加载和渲染(内容最重要)两侧内容固定,中间内容随着宽度自适应一般用于PC页面 圣杯布局和双飞翼布局的实现方式: 使用float布局两侧使用margin负值&am…

git 、gitLub 提交后查看显示全部删除又全部新增

问题: git提交后删除的行数与增加的行数一样,没有修改git也会去全部删除又全部新增 大概是下面你这个样子: 原因: 换行符的原因,win、mac、linux/Unix 换行符是不一样的,提交的文件换行符和git服务器的不…

【Unity300个技巧】牛顿的学问!如何优雅地使用力?

Unity 提供了一个完备且强大物理引擎。但在刚接触的时候,你可能会对它与现实物理规律对应有一些疑惑。 比如: 现实中 1N 的力在 Unity 中怎么表现?Unity 中物体的质量是计算的?Unity 中给物体添加力的方法是 rb.AddForce()&#x…

ICME 论文Latex模版要求

2023年模版获取链接: 链接: https://pan.baidu.com/s/1Hjk4nnybQN6LE23SGfbxKQ 提取码: 27dj --来自百度网盘超级会员v4的分享 论文写作要求: 所有手稿必须是英文的; 论文长度不应超过6页,包括所有文本、图形和参考文献&#…

Qt 设置CPU亲缘性,把进程和线程绑定到CPU核心上(Linux)

Qt 设置CPU亲缘性,把进程和线程绑定到CPU核心上(Linux) 文章目录Qt 设置CPU亲缘性,把进程和线程绑定到CPU核心上(Linux)摘要1 什么是CPU亲缘性2 目的3 API 介绍3.1 进程绑定到CPU3.2 线程绑定到CPU4 实际操作4.1 实操代码主进程串口线程USB线程程序运行资…

iOS开发M1芯片遇到的问题

pod失败执行: sudo arch -x86_64 gem install ffi Then arch -x86_64 pod install M1芯片的Mac无法在模拟器上运行项目building for iOS Simulator或could not find module for target.. 真机上可运行,模拟器上不行,并出现以下错误&#xf…

高级UI之贝塞尔曲线

前言 相信很多同学都知道“贝塞尔曲线”这个词,我们在很多地方都能经常看到。但是,可能并不是每位同学都清楚地知道,到底什么是“贝塞尔曲线”,又是什么特点让它有这么高的知名度。 贝塞尔曲线的数学基础是早在 1912 年就广为人…

八款流行无线黑客工具,非常实用

1、Aircrack Aircrack是最受欢迎的无线密码破解工具之一,可用于802.11a / b / g WEP和WPA破解。Aircrack使用的算法是通过捕获数据包来恢复无线密码。收集到足够的数据包后,它会尝试恢复密码。为了使攻击更快,它通过一些优化实现标准的FMS攻…

腾格尔和黑鸭子,演唱《遥远的地方》不同版本,哪首歌更值得期待

说起中国华语乐坛的音乐人,腾格尔老师算比较出名的一位,听说最近他又推出了一首新歌。《遥远的地方》这首歌曲,就是腾格尔老师的新歌,可能很多人会对这个歌名感到有些熟悉。 早在九十年代的时候,中国华语乐坛非常流行组…

【雷神笔记本快捷键】雷神笔记本FN功能快捷键大全以及电脑CPU处于低功耗但电脑风扇高速转动噪音较大解决方案

雷神笔记本FN功能快捷键大全以及电脑CPU处于低功耗但电脑风扇高速转动噪音较大解决方案。 本计算机有16个功能键盘。这些键的功能因应用程序而异。 请参阅软件文档以了解各个键的使用方法。 【FN】键提供便携式电脑的扩展功能,始终与另一按键搭配使用。‘【FNEsc】:启用或禁用…

教你如何使用 Visual Studio IDE 正确的进行 C++ 桌面开发

目录 先决条件 入门 一、演练:使用项目和解决方案 (C) 准备工作 创建项目 在 Visual Studio 中创建项目 组织项目和文件 向项目添加类 向主函数添加测试代码 向项目添加测试代码 生成并运行应用项目 生成并运行此项目 二、演练:生成项目 (C…

改良海量数据存储的若干的手段-转变数据垃圾为黄金

教材篇 直到翻看了后面章节,才注意到封面上面的标语,中文意思是“禁止倾倒数据垃圾,违者务必读此书!” 大致祖师爷对杂乱无序的数据垃圾深恶痛绝,在这点上大凡上了点年头的数据工作者都是深有体会~ 直到翻看了后面章…