【Java面试】七、SpringMvc的执行流程、SpringBoot自动装配原理

文章目录

  • 1、SpringMVC的执行流程
    • 1.1 视图阶段
    • 1.2 前后端分离阶段
  • 2、SpringBoot自动配置原理
  • 3、框架常用的注解
    • 3.1 Spring的注解
    • 3.2 SpringMvc的注解
    • 3.3 SpringBoot的注解
  • 4、面试

1、SpringMVC的执行流程

1.1 视图阶段

旧项目中,未前后端分离时,用到JSP,相关流程为:

  • 浏览器发出请求
http://localhost:8080/user/getById/1
  • 请求达到前端控制器DispatcherServlet,它相当于一个调度中心,会加载处理器映射器、处理器适配器、视图解析器。DispatcherServlet被Tomcat容器初始化,所有的请求先经过它。
  • DispatcherServlet向处理器映射器去查询handler,即查询这个接口该调哪个Controller的哪个方法。处理器映射器里以key-value形式存了接口路径合类名+方法名

在这里插入图片描述

  • 查询到handler后,映射器返回给控制器一个处理器执行链HandlerExecutionChain,注意不仅仅是返回一个接口对应的类名 + 方法名,如果接口涉及拦截器,拦截器也会被封装到处理器执行链对象中

在这里插入图片描述

  • 控制器通过适配器HandlerAdaptor,调用handler并执行,且这里适配器还负责处理了参数绑定和返回值处理。最终返回一个ModelAndView给前端控制器

在这里插入图片描述

  • 前端控制器请求视图解析器ViewResolver,最终得到一个View对象(逻辑视图转为真正的视图)

在这里插入图片描述

  • 前端控制器渲染视图,返回给浏览器一个有数据的页面

在这里插入图片描述

流程总结:

在这里插入图片描述

1.2 前后端分离阶段

不再返回一个ModelAndView,而是返回一个Json给前端(将最终结果通过HttpMessageConvert转换器转为Json):

在这里插入图片描述
流程总结:

在这里插入图片描述

2、SpringBoot自动配置原理

从SpringBoot启动类的注解可以看到,其源码有三个注解:

在这里插入图片描述

  • @SpringBootConfguration:与 @Configuration 注解作用相同,用来声明当前也是一个配置类
  • @ComponentScan:组件扫描,默认扫描当前引导类所在包及其子包
  • @EnableAutoConfiquration

@EnableAutoConfiquration则是SpringBoot 实现自动化配置的核心注解,继续往下跟:

在这里插入图片描述

@Import注解,导入一个Bean到Spring容器。这里导入一个Selector,用来加载类路径下的spring.factories中定义的自动配置类,并将这些自动加载为配置Bean

在这里插入图片描述

spring.factories中已经定义好了很多自动配置类,大概有一百多个,但这一百多个不是都要加载到IoC容器中。以spring.factories中的RedisAutoConfiguration这个自动配置类为例,这里有两个关键注解,一个是@ConditionalOnClass,即有RedisOperation类的字节码时,创建这个RedisAutoConfig自动配置类的Bean,如此,只有你引入了Redis-starter时,就会加载RedisAutoConfig这个Bean。 此外,下面用@Bean创建RedisTemplate这个客户端操作类Bean的条件是,环境中没有叫redisTemplate的Bean,即开发者没有自己定义这个Bean时,框架给你创建并维护个redisTemplate的Bean

在这里插入图片描述
总结:

在这里插入图片描述

3、框架常用的注解

3.1 Spring的注解

Spring框架(亮点:IoC、Bean)的注解:
在这里插入图片描述

3.2 SpringMvc的注解

SpringMvc框架(亮点:web请求处理)的注解:

在这里插入图片描述

3.3 SpringBoot的注解

SpringBoot框架(亮点:快速起步、自动配置)的注解:

在这里插入图片描述
再加一个@SpringBootApplication

4、面试

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

OAK相机如何将 YOLOv10 模型转换成 blob 格式?

编辑:OAK中国 首发:oakchina.cn 喜欢的话,请多多👍⭐️✍ 内容可能会不定期更新,官网内容都是最新的,请查看首发地址链接。 Hello,大家好,这里是OAK中国,我是Ashely。 专…

Microsoft Fabric 是什么?

最近半个月没有更新内容,原因是什么呢? 原因是花了两周的时间备考了一下"Microsoft Certified: Fabric Analytics Engineer Associate"的考试认证。 非常幸运考试通过了。 那什么是Microsoft Fabric 呢? Microsoft Fabric 是一个…

运筹学_4.整数规划

文章目录 引言4.1 分枝定界方法求解整数规划问题整数规划的分类整数规划解法概述分支定界法 4.2 0-1整数规划0-1整数规划的数学模型隐枚举法求解0-1规划问题 4.3 指派问题(分配问题)的匈牙利解法指派问题的数学模型指派问题的匈牙利解法 引言 规划中的决策变量(全部或部分)限制…

【备战蓝桥杯】蓝桥杯省一笔记:算法模板笔记(Java)

蓝桥杯 0、快读快写模板1、回文判定2、前缀和3、差分4、二分查找5、快速幂6、判断素数7、gcd&lcm8、进制转换9、位运算10、字符串常用API11、n的所有质因子12、n的质因子个数13、n的约数个数14、n阶乘的约数个数15、n的约数和16、阶乘 & 双阶乘17、自定义升序降序18、动…

2024盘古石初赛(服务器部分)

赛后总结 这次初赛就有20道服务器部分赛题,做的情况一般,错了5道题这样,主要原因就是出在第二个网站服务器没有重构起来 今天来复现一下 这次的服务器部分我直接用仿真仿起来就开找了 第一台IM前期配置 先把网配置好,然后ssh…

如此简单,一文带你玩转接口自动化上(Python + Pytest + Requests + Allure )

一. 前言 哈喽大伙们好,好久不见距离上次更新博客已经有一年之久了,这将近一年的时间小编主要的时间都花在了实习和24届校招上面了,最终也是收获满满,选择了一个还不错的offer,感谢一路走来的自己和身边朋友的帮助&…

基于Three.js实现的3D立方体动画

本文由ScriptEcho平台提供技术支持 项目地址:传送门 基于Three.js实现的3D立方体动画 应用场景 该代码段适用于需要在网页中创建交互式3D场景的场景。例如,可以用于展示产品、创建游戏或制作视觉效果。 基本功能 此代码段使用Three.js库创建了一个…

【机器学习】随机森林:深度解析与应用实践

🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 ​💫个人格言: "如无必要,勿增实体" 文章目录 随机森林:深度解析与应用实践引言1. 随机森林基础1.1 什么是随机森林…

Android更新优化 - 增量更新是如何节省用户时间和流量的

增量更新和全量更新 我想玩过大型手游的人都知道,手游的安装包非常大,因为资源图片众多。而你每次更新都把所有文件都更新下来,是非常耗时的,对吧。耗时是一个方面,有些人在户外开的是移动网络,动不动就几…

计算机组成原理·海明编码及其实验

前言:海明编码这一块在刚开始的时候没有弄懂,后面通过做实验、复习慢慢摸清了门道。在学习计算机组成原理的过程中,实验实践是很重要的,它会让你去搞清楚事情背后的原理,逼着你学会你没听懂的东西。这篇文章会从海明码…

Check Point 安全网关任意文件读取漏洞复现(CVE-2024-24919)

Check Point 安全网关任意文件读取漏洞复现(CVE-2024-24919) 1.漏洞描述 Check Point Security Gateways 是 Check Point Sofware 提供的一系列 网络安全Q解决方案。这些解决方案包括下一代防火墙(NGFW)、数据中心安全网关和 A1驱动的量子网关,旨在为企业提供针对…

@Value 读取环境变量配置

在项目开发过程中,有必要使用一些灰色规则(即仅用于开发使用过程中的逻辑控制变量)。 比如,本地开发中,一些业务逻辑需要调用第三方代码,但又在本地调不通,怎么办。只能通过 if(本地开发) {mock…

【开源】渔具租赁系统 JAVA+Vue.js+SpringBoot+MySQL

目录 一、项目介绍 1.1渔具档案模块 1.2渔具租赁模块 1.3渔具归还模块 1.4在线留言模块 二、项目截图 三、核心代码 一、项目介绍 Vue.jsSpringBoot前后端分离新手入门项目《渔具租赁系统》,包括渔具档案模块、渔具租赁模块、渔具归还模块、在线留言模块和部…

当新媒体运营开始说真话,这些道理你真的懂么?沈阳新媒体运营培训

运营新人,尤其是刚毕业、啥都不会的大学生,一定要认清的现实就是:虽然新媒体运营这个岗位门槛比较低,薪资也比较香,但绝不是养老型的工作。 平时大家还是很忙的,所以一定要摒弃学生思维,千万别…

02--nginx代理缓存

前言:比较常用的用法反向代理,和缓存的一些操作,用虚拟环境复刻出来,里面参数不用详细记录,用作复习,使用时直接查找即可。环境搭建过程参考前一篇文章nginx基础。 1、基础环境 IP角色作用192.168.189.143…

freertos初体验 - 在stm32上移植

1. 说明 freertos内核 非常精简,代码量也很少,官方也针对主流的编译器和内核准备好了移植文件,所以 freertos 的移植是非常简单的,很多工具(例如CubeMX)点点鼠标就可以生成一个 freertos 的工程&#xff0…

AquaCrop农业水资源管理,模拟作物生长过程中水分的需求与消耗

AquaCrop是由世界粮食及农业组织(FAO)开发的一个先进模型,旨在研究和优化农作物的水分生产效率。这个模型在全球范围内被广泛应用于农业水管理,特别是在制定农作物灌溉计划和应对水资源限制方面显示出其强大的实用性。AquaCrop 不…

VR导航的实现原理、技术优势和应用场景

VR导航通过虚拟现实技术提供沉浸式环境,结合室内定位技术实现精准导航。目前,VR导航已在多个领域展现出其独特的价值和潜力,预示着智能导航系统的未来发展。 一、实现原理 VR导航技术依托于虚拟现实(VR)和室内定位系统。VR技术利用计算机模…

Python考试复习---day5

1.打印商品名 ainput().split() print("商品列表:") for i,name in enumerate(a):print("{}\t{}".format(i,name))enumerate----枚举--利用它可以同时获得索引和值 enumerate多用于在for循环中得到计数 例如: list1 ["这&qu…

Netty SSL双向验证

Netty SSL双向验证 1. 环境说明2. 生成证书2.1. 创建根证书 密钥证书2.2. 生成请求证书密钥2.3. 生成csr请求证书2.4. ca证书对server.csr、client.csr签发生成x509证书2.5. 请求证书PKCS#8编码2.6. 输出文件 3. Java代码3.1. Server端3.2. Client端3.3. 证书存放 4. 运行效果4…