【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 是一个…

【第十一节】C/C++的预处理及命名空间

目录 一、预处理 1.1 文件包含(#include) 1.2 宏定义(#define) 1.2.1 常量宏定义 1.2.2 宏函数 1.2.3 宏取消 1.3 条件编译 1.4 预处理使用例子 1.4.1 extern "C" 块的应用 1.4.2 选择编译 1.4.3 注释大段代…

运筹学_4.整数规划

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

个人开发者能用TensorFlow做什么

个人开发者可以使用 TensorFlow 实现许多有趣且有用的机器学习和深度学习项目。以下是一些具体的应用和项目示例: 1. 图像处理 图像分类:训练一个模型将图片分类到不同类别,如猫和狗的分类。物体检测:检测图像中的多个对象及其位…

【备战蓝桥杯】蓝桥杯省一笔记:算法模板笔记(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…

C++常用算法函数

1、排序 &#xff1a;std::sort #include <algorithm> #include <vector>std::vector<int> v {4, 2, 5, 3, 1}; std::sort(v.begin(), v.end()); // 将v中的元素按升序排序2、查找: std::find #include <algorithm> #include <vector>std::ve…

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

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

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

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

汽车企业如何通过神秘顾客调查确保销售服务规范

在当今竞争激烈的汽车市场&#xff0c;购车体验已成为消费者选择品牌的重要考量因素。为了确保汽车门店的销售服务符合规范&#xff0c;许多汽车企业开始采用神秘顾客调查这一策略。 那么&#xff0c;汽车企业在进行神秘顾客调查时&#xff0c;应该从那些方面着手才能保证调查…

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

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

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

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

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

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

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

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

@Value 读取环境变量配置

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

JavaScript基础知识1(引入方式、注释、输入输出、变量、数组)

JavaScript基础知识1&#xff08;引入方式、注释、输入输出、变量、数组&#xff09; javascript 引入方式内部方式外部形式 注释和结束符单行注释多行注释 结束符 输入和输出输出输入 alert(你好JS);document.write(js我来了);console.log(看看对不对);prompt(输入您的姓名&am…

cxgrid列内容居中

笑掉大牙&#xff0c;需要这个功能了&#xff0c;找遍了全网&#xff0c;没有一个可用的成功案例&#xff0c;唯一可用的就是表中添加字段&#xff0c;然后选择properties然后选择对齐方式&#xff0c;根本不实用&#xff0c;因为列都是动态生成的&#xff0c;不可能提前做好所…

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

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

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

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