Spring、SpringMVC

一、Spring框架中的单例Bean是线程安全的吗?

【默认单例的情况下】Spring Bean并没有可变的状态(如Service类和DAO类),即只能查不能改,所以没有并发问题,所以某种程度上来说Spring的单例Bean是线程安全的。

回答

Spring框架中有一个@Scope注解,默认为单例。因此当Spring的Bean中都是注入无状态的对象,没有线程安全问题,但如果在Bean中定义了可修改的成员变量如上述的count变量,从JVM角度看它本身属于方法区,即线程共享的区域中,将来多个请求发来,多个线程是共享的,所以存在问题。

当然如果注册为Bean的字段本身也是可变的【除了Service、DAO等其他的】,也存在线程安全问题,因为Bean默认为单例的,我们可以将其改为多例或者加同步锁。

只要成员变量是不可修改的,则这个Bean是线程安全的,如果成员变量是可修改的,则可能有线程安全问题。

二、SpringMVC的执行流程

前后端分离架构:【接口开发、异步】

请求到DisPatcherServlet,还有一个过程,首先由tomcat的连接器监听到请求,处理参数给容器,通过映射一级级找到dispatcherServlet

用户发送的请求统一由前端控制器(DispatcherServlet统一拦截),交给处理器映射器

【负责将请求映射到对应的处理器(Controller方法),存放在一个map中】

找到了之后将方法名和handler封装为处理器执行链给前端控制器

前端控制器知道了这个请求的方法,直接将请求交给处理器适配器【作用是解析参数,因为每个请求,参数类型不一样,有基基本类型、引用类型、路径参数等等…】,处理器适配器处理好了参数之后,再将请求发给处理器Handler【一般对应的controller都有@ResponseBody注解,即将返回结果转换为JSON并响应】

处理器执行链包括了哪些东西?

  1. 处理器对象:即具体的 Controller 类中的处理器方法。
  2. 处理器拦截器(Handler Interceptor):处理器拦截器可以在处理器方法执行前、执行后,或之前和之后执行一些共同的逻辑,比如权限验证、日志记录等。
  3. 处理器方法:即处理请求的具体方法。

当请求到达前端控制器(DispatcherServlet)后,前端控制器会通过处理器映射器找到对应的处理器,并返回一个处理器执行链,包括了以上所述的元素。处理器执行链将负责依次执行处理器拦截器的前置处理、处理器方法的执行以及处理器拦截器的后置处理。

处理器拦截器的作用:

处理器拦截器与处理器执行链密切相关,处理器执行链中的处理器拦截器可以在请求进入处理器方法之前和处理器方法执行之后实施拦截逻辑。通过处理器拦截器,我们可以实现一些通用的逻辑,而不需要在每个处理器方法中重复编写。

处理器执行链中包含了处理器对象和处理器方法【包含了具体的执行逻辑】,那为什么还要最终交给处理器Handler来执行处理器方法?

处理器适配器的作用是将处理器对象(Controller)转换为处理器(Handler)的形式,然后执行其中的方法以处理请求。处理器适配器知道如何调用不同类型的处理器对象,并处理返回值以生成最终的响应给前端控制器。

因此,虽然处理器执行链中包含了处理器方法,但最终还需要通过调用处理器对象和处理器适配器来执行具体的处理器方法,从而完成请求的处理过程。

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

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

相关文章

在线旅游网站,基于 SpringBoot+Vue+MySQL 开发的前后端分离的在线旅游网站设计实现

目录 一. 前言 二. 功能模块 2.1. 登录界面 2.2. 管理员功能模块 2.3. 用户功能模块 三. 部分代码实现 四. 源码下载 一. 前言 随着科学技术的飞速发展,各行各业都在努力与现代先进技术接轨,通过科技手段提高自身的优势,旅游网站当然…

【北京迅为】《iTOP-3588开发板从零搭建ubuntu环境手册》-第2章 获取并安装Ubuntu操作系统

RK3588是一款低功耗、高性能的处理器,适用于基于arm的PC和Edge计算设备、个人移动互联网设备等数字多媒体应用,RK3588支持8K视频编解码,内置GPU可以完全兼容OpenGLES 1.1、2.0和3.2。RK3588引入了新一代完全基于硬件的最大4800万像素ISP&…

Spring框架学习-详细

文章目录 1. Spring简介1.1 面向接口编程1.2 Spring简介1.3 Spring体系结构 2 Spring IoC - 基于XML2.1 Sping框架部署(IoC)2.2 Spring IoC使用2.3 IoC和DI2.4 DI依赖注入Spring容器通过反射方法实现属性注入有三种方式1. set方法注入2. 构造器注入 2.5 …

uni-appH5Android混合开发三 || uni-app调用Android原生方法的三种方式

前言: 关于H5的调用Android原生方法的方式有很多,在该片文章中我主要简单介绍三种与Android原生方法交互的方式。 uni-app跨平台框架介绍和快速入门 uni-app跨平台框架介绍和快速入门 一、H5方法调用android原生方法 H5 Android开发规范官方文档&#…

【电路笔记】-无源高通滤波器

无源高通滤波器 文章目录 无源高通滤波器1、概述2、一阶高通滤波器的频率响应3、高通滤波器示例4、二阶高通滤波器5、RC 差异化因素高通滤波器与低通滤波器电路完全相反,因为这两个组件已互换,滤波器输出信号现在从电阻器两端获取。 1、概述 由于低通滤波器只允许低于其截止…

基于SSM框架多人命题系统

采用技术 基于SSM框架多人命题系统的设计与实现~ 开发语言:Java 数据库:MySQL 技术:SpringMVCMyBatis 工具:IDEA/Ecilpse、Navicat、Maven 页面展示效果 学生端 登录 个人中心 公告信息 试题信息 管理员 登录 个人信息…

【JavaScript】内置对象 - 数组对象 ③ ( 数组反转 - reverse 方法 | 数组排序 - sort 方法 | 自定义数组排序规则 )

文章目录 一、数组排序1、翻转数组元素 - reverse()2、数组元素排序 - sort() 默认从小到大排序3、数组元素排序 - sort() 自定义排序规则4、数组元素排序 - sort() 自定义降序排序简化写法 Array 数组对象参考文档 : https://developer.mozilla.org/zh-CN/docs/Web/JavaScript…

6.数据库

1.实体用矩形表示,属性用椭圆表示,联系用菱形表示 2.层次模型用数表示 3.网状模型用图结构表示 4.关系模型用二维表格结构来表示 5.概念模式基本表 外模式视图 内模式存储 6.模式/内模式映像 外模式/模式映像 7.数据的物理独立性 跟内模式关系 逻辑是视图…

K8s源码分析(二)-K8s调度队列介绍

本文首发在个人博客上,欢迎来踩! 本次分析参考的K8s版本是 文章目录 调度队列简介调度队列源代码分析队列初始化QueuedPodInfo元素介绍ActiveQ源代码介绍UnschedulableQ源代码介绍**BackoffQ**源代码介绍队列弹出待调度的Pod队列增加新的待调度的Podpod调…

【Qt 学习笔记】Qt常用控件 | 多元素控件 | List Widget的说明及介绍

博客主页:Duck Bro 博客主页系列专栏:Qt 专栏关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞👍收藏⭐评论✍ Qt常用控件 | 多元素控件 | List Widget的说明及介绍 文章编号&#x…

ansible部署lamp架构

搭建参考:ansible批量运维管理-CSDN博客 定义ansible主机清单 [rootansible-server ~]# vim /etc/hosts 192.168.200.129 host01 192.168.200.130 host02 [rootansible-server ~]# vim /etc/ansible/hosts [webserver] host01 host02 在ansible端编写index.html…

Reactor Netty UDP 客户器端-响应式编程-017

🤗 ApiHug {Postman|Swagger|Api...} 快↑ 准√ 省↓ GitHub - apihug/apihug.com: All abou the Apihug apihug.com: 有爱,有温度,有质量,有信任ApiHug - API design Copilot - IntelliJ IDEs Plugin | Marketplace The Nex…