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.pswp.cn/web/10064.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/10064.shtml
英文地址,請注明出處:http://en.pswp.cn/web/10064.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【ZZULI數據結構實驗】壓縮與解碼的鑰匙:赫夫曼編碼應用

📃博客主頁: 小鎮敲碼人 💚代碼倉庫,歡迎訪問 🚀 歡迎關注:👍點贊 👂🏽留言 😍收藏 🌏 任爾江湖滿血骨,我自踏雪尋梅香。 萬千浮云遮碧…

Faiss原理及使用總結

Faiss(Facebook AI Similarity Search)是一個用于高效相似性搜索和密集向量聚類的庫。 一、原理 向量表示與相似度度量:在Faiss中,數據通常被表示為高維向量,這些向量可以來自深度學習模型的特征提取,也可…

2024-05-11 問AI:在深度學習中,學習率是什么

文心一言 在深度學習中,**學習率(Learning Rate)**是一個非常重要的超參數,它控制著模型在訓練過程中參數更新的步長。具體來說,學習率決定了在每次迭代(或稱為一個epoch)中,模型根…

前端工程化之包管理器

這里寫目錄標題 什么是包包管理工具常用的包管理工具npmnpm 基本使用初始化搜索工具包下載安裝包導入 npm 包基本流程生產依賴與開發依賴全局安裝安裝全部依賴安裝指定版本的包刪除依賴包 cnpm全局安裝nrm 的使用 yarn全局安裝yarn 常用命令 pnpm 【推薦使用】全局安裝 什么是包…

我國吻合器市場規模不斷擴大 國產化率有所增長

我國吻合器市場規模不斷擴大 國產化率有所增長 吻合器是替代手工切除或縫合的一種醫療器械,其工作原理與訂書機十分相似,可利用鈦釘對組織進行離斷或吻合。經過多年發展,吻合器種類逐漸增多,根據手術方式不同,吻合器大…

【JavaEE 初階(三)】多線程代碼案例

?博主主頁: 33的博客? ??文章專欄分類:JavaEE?? 🚚我的代碼倉庫: 33的代碼倉庫🚚 🫵🫵🫵關注我帶你了解更多線程知識 目錄 1.前言2.單例模式2.1餓漢方式2.2餓漢方式 3.阻塞隊列3.1概念3.2實現 4.定時器4.1概念4.…

支付寶小程序如何去除頁面下拉回彈

描述:支付寶小程序頁面下拉時會產生回彈,如果頁面上有拖拽功能,會有影響 解決方法: 頁面xx.config.js中設置:allowsBounceVertical: “NO” 官方文檔:https://opensupport.alipay.com/support/FAQ/7110b5d…

WT32-ETH01作為TCP Client進行通訊

目錄 模塊簡介WT32-ETH01作為TCP Client設置電腦作為TCP Server設置連接并進行通訊總結 模塊簡介 WT32-ETH01網關主要功能特點: 采用雙核Xtensa⑧32-bit LX6 MCU.集成SPI flash 32Mbit\ SRAM 520KB 支持TCP Server. TCP Client, UDP Server. UDP Client工作模式 支持串口、wif…

鴻蒙OpenHarmony技術:【Docker編譯環境】

Docker環境介紹 OpenHarmony為開發者提供了兩種Docker環境,以幫助開發者快速完成復雜的開發環境準備工作。兩種Docker環境及適用場景如下: 獨立Docker環境:適用于直接基于Ubuntu、Windows操作系統平臺進行版本編譯的場景。基于HPM的Docker環…

其他編程語言中調用 Python 腳本,如何設置Python腳本的相對路徑

import os# 假設 script_directory 是你的腳本所在的目錄 script_directory os.path.dirname(os.path.abspath(__file__))# 使用 os.path.join 來構建相對路徑 relative_path_to_image os.path.join(script_directory, 合并/figure_pic2.png)# 現在你可以使用這個相對路徑來加…

uni-app+vue3 +uni.connectSocket 使用websocket

前言 最近在uni-appvue3websocket實現聊天功能,在使用websocket還是遇到很多問題 這次因為是app手機應用,就沒有使用websocket對象,使用的是uni-app的uni.connectSocket 為了方便測試這次用的是node.js一個簡單的dom,來聯調模擬…

Apache Flume Agent內部原理

Apache Flume Agent內部原理 Apache Flume 是一個可擴展的、分布式的日志收集、聚合和傳輸系統。在 Flume 中,Agent 是一個獨立的進程,負責接收、傳輸和處理數據。Agent 內部包含多個組件,每個組件都有不同的功能和責任。 1. Source&#xff…

5個 Elasticsearch 核心組件

Elasticsearch 是一個基于 Lucene 的搜索引擎,它提供了分布式、高可用、多租戶的能力。Elasticsearch 的核心組件包括節點(Node)、集群(Cluster)、索引(Index)、分片(Shard&#xff…

三下鄉社會實踐投稿攻略在這里

在當今信息爆炸的時代,如何讓自己的聲音被更多人聽到,成為許多人和企業所關心的問題。其中,向各大媒體網站投稿,成為了一種常見的宣傳方式。但是,如何投稿各大媒體網站?新聞媒體發文策略又有哪些呢&#xf…

Flutter Clipboard實現復制功能

Flutter內置了Clipboard 功能,可以幫助我們完成復制粘貼的功能,比如我們想把“hello flutter”復制到粘貼板,代碼如下: TextButton(onPressed: () async {await Clipboard.setData(ClipboardData(text: hello flutter)

基于SpringBoot設計模式之開端

文章目錄 前言引言開始 前言 為了更好的在項目中,能更加優雅的使用設計模式,比較針對性的解決我們的問題。我將在這個專欄詳細的描述23種設計模式,為了與時俱進,我打算通過springboot的形式將23種設計模式全部擼完! 引…

光耦推薦—高速風筒方案中用到哪些光耦型號

高速風筒是現代生活中常見的電器設備,廣泛應用于家庭、商業和工業領域;光耦是一種能夠將輸入信號轉換成輸出信號的元器件,其作用在于將電氣信號轉換成光信號,從而實現電路的隔離和保護;采用光耦可實現對風機轉速和溫度…

【管理咨詢寶藏99】離散制造智能工廠戰略規劃方案

本報告首發于公號“管理咨詢寶藏”,如需閱讀完整版報告內容,請查閱公號“管理咨詢寶藏”。 【管理咨詢寶藏99】離散制造智能工廠戰略規劃方案 【格式】PDF版本 【關鍵詞】智能制造、先進制造業轉型、數字化轉型 【核心觀點】 - 推進EHS、品質一致性、生…

【無標題】QCC 308x 518x 517x增加usb voice 32k采樣率

QCC 308x 518x 517x增加usb voice 32k采樣率 diff --git a/adk/src/domains/audio/kymera/kymera_usb_voice.c b/adk/src/domains/audio/kymera/kymera_usb_voice.c index 6dd82061..532c4ad8 100755 --- a/adk/src/domains/audio/kymera/kymera_usb_voice.c +++ b/adk/src/dom…

Failed to start tomcat.service: Unit is not loaded properly: Bad message 如何解決?

錯誤 “Failed to start tomcat.service: Unit is not loaded properly: Bad message” 通常意味著的 tomcat.service systemd 配置文件存在語法錯誤或配置不正確。為了解決這個問題,一步步檢查和修正這個服務文件。 1. 檢查 tomcat.service 文件 首先&#xff0c…