Spring Singleton,請求,會話Bean和線程安全

由眾多有用框架組成的Spring框架生態系統已成為許多Java EE應用程序的基礎。 但是在所有Spring產品的核心中,我們仍然擁有Spring DI / IOC框架,該框架將Spring推向了新的高度。

隨著越來越多的人將Spring MVC或JSF-Spring集成用于他們的應用程序,除了更傳統的Singleton和Prototype范圍之外,Spring Bean現在更頻繁地用于請求/會話范圍。

剛開始使用各種Spring范圍的開發人員最初的好奇心之一是,這些范圍在Web應用程序中以及在需要編寫安全的并發代碼的情況下的行為方式。 好吧,這個“否”的答案就是要對這些范圍進行過度考慮,因為它們的行為與命名方式完全相同。 讓我們以JSF-Spring集成為例,其中所有JSF bean都由Spring IOC容器加載,并且bean的作用域也使用假定的Spring的@Scope注釋定義。

具有@Scope(“ request”)的bean可以在任何新的傳入請求中創建,因此可以保證它的線程安全,因為它是在每次有新請求進入時創建的。接下來是@Scope(“ session”) bean,對于在用戶的每個會話中,如果用戶通過瀏覽器的多個選項卡訪問應用程序,則該bean范圍肯定會出現并發問題,因此對于開發人員而言,確保共享會話數據的狀態不會損壞很重要。

現在是@Scope(“ singleton”)或Spring Bean的默認范圍,這些單例Bean在繁重的Web應用程序中的行為如何。 首先,重要的是要了解“ Singleton”僅意味著一個實例,即應用程序將僅具有該bean的一個實例。 現在,Spring框架對于這個Singleton bean的多線程行為并沒有做任何事情 ,即它只是一個普通的Singleton bean,并且由開發人員來處理與該bean有關的并發問題。

現在出現了一個問題,Web應用程序中應將哪種bean用作Singleton ,答案很簡單: 任何沒有STATE的Bean都可以是singleton 。 例如,可以輕松地成為單例的bean是DAOServiceController這些控制器沒有自己的狀態,而是我們在應用程序中利用這些bean執行某些操作。DAO層bean可以是單例,因為它們沒有具有各自的狀態,但是每個線程使用DAO bean進行訪問以執行特定于線程的操作,因此DAO bean不受其自身并發訪問的影響,因為它沒有其自身的狀態。

選擇Singleton bean的一個非常糟糕的例子是需要維護其狀態的bean,在這種情況下,每個線程都會嘗試通過破壞數據將自己的狀態強加到該bean上。 例如,如果將具有名稱和年齡的設置器和獲取器的Person bean設為單例。 現在,如果有多個線程開始訪問此bean,它們將繼續覆蓋Person實例的最后一個設置值,從而破壞狀態。

結論–請記住黃金法則: 僅選擇那些沒有狀態的bean作為單例

參考:來自我們JCG合作伙伴 Tarun Sapra的Spring Singleton,請求,會話Bean和線程安全 ,在“ Java Enterprise Ecosystem”博客上 。

相關文章 :

  • Spring依賴注入技術的發展
  • Spring MVC開發–快速教程
  • 每個人都知道MVC…
  • Spring MVC3 Hibernate CRUD示例應用程序
  • 使用Spring Security保護GWT應用程序
  • Java教程和Android教程列表

翻譯自: https://www.javacodegeeks.com/2011/11/spring-singleton-request-session-beans.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/374337.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/374337.shtml
英文地址,請注明出處:http://en.pswp.cn/news/374337.shtml

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

相關文章

some fragments

1.fullpage 2.one page.js 3.scrollReveal.js 4.wow.js 5.瀏覽器前綴: -webkit- : Safari,Chrome -o- : Opera -moz- : Firefox -ms- : IE   6.css3過渡動畫:transitio…

面試之ajax原理(轉載)

總結1 總結2 AJAX全稱為“Asynchronous JavaScript and XML”(異步JavaScript和XML),是一種創建交互式網頁應用的網頁開發技術, 是幾種原有技術的結合體。它由下列技術組合而成。 1.使用CSS和XHTML來表示。 2. 使用DOM模型來交互和…

優化方案電子版_關于小區分支道路整修設計方案的討論稿(No.2020121)

各位業主,大家好! 關于綠洲比華利花園主干道翻新和次干道整修前期勘查和設計方案,經業委會及小區專家小組、設計單位申都設計公司工程設計人員結合本小區的實際情況進行了深入討論,優化設計,形成如下三個獨立方案&…

OSGI和Spring動態模塊–簡單的Hello World

在此姿勢中,我們將采用使用OSGi進行的第一個實現,并使用Spring Dynamic Modules改進應用程序。 Spring動態模塊(Spring Dm)使基于OSGi的應用程序的開發更加容易。 這樣,服務的部署就容易得多。 您可以像其他任何Spring…

C語言代碼規范(五)函數參數個數

一個函數的參數的數目過多(尤其是超過8個)顯然是一種不可取的編程風格。參數的數目直接影響調用函數的速度,參數越多,調用函數越慢。 參數的數目少,程序就顯得精練、簡潔,這有助于檢查和發現程序中的錯誤。…

vijos P1740 聰明的質檢員

題目鏈接:傳送門 題目大意:給你n個物品,每件物品有重量 W 和價值 V,給m個區間,和一個標準值。(n,m最大200000) 要求找到一個值x,使得m個所有區間的權值和與標準值的差的絕對值最小。單個區間權值計算公式(數目num0,價值…

為什么有的開關電源需要加自舉電容?

一、什么是自舉電路? 1.1 自舉的概念 首先,自舉電路也叫升壓電路,是利用自舉升壓二極管,自舉升壓電容等電子元件,使電容放電電壓和電源電壓疊加,從而使電壓升高。有的電路升高的電壓能達到數倍電源電壓。…

VS2010報錯 error:LINK1123:轉換到COF期間失敗,文件無限或損壞

右鍵工程-配置屬性-清單工具-輸入和輸出,嵌入清單一項重新選擇為否,如下圖 修改后重新生成和運行,發現程序正常運行了。

springboot 整合mybatis_SpringBoot整合Mybatis、MybatisPuls

文末視頻講解SpringBoot的版本是2.2.0一、整合Mybatis1-1、引入pom文件<dependency> <groupId>mysqlgroupId> <artifactId>mysql-connector-javaartifactId> <version>8.0.19version> dependency> <dependency> &l…

iOS 開發中遇到的問題

1. 關于糾結很久的KVO崩潰問題&#xff0c;其真正原因是&#xff0c;在刪除roomItem的KVO之前,將這個對象已經賦值為nil,所以實際上并沒有刪除他的observer&#xff0c;因此而崩潰&#xff1b;長時間糾結的原因是受.cxx_destruct影響了思路 2.拷貝block 因為block變量默認是聲明…

為舊版代碼創建存根–測試技術6

任何閱讀此博客的人都可能已經意識到&#xff0c;目前我正在開發一個包含大量舊代碼的項目&#xff0c;這些舊代碼龐大&#xff0c;擴展且編寫時從未進行過任何測試。 在使用此遺留代碼時&#xff0c;有一個行為異常的類非常普遍&#xff0c;整個團隊都一次又一次地犯錯。 為了…

C學習雜記(一)常見誤會

一、sizeof是關鍵字&#xff0c;不是函數。 二、strlen是函數。

python性能解決_我們如何發現并解決Python代碼中性能下降的問題

Python部落(python.freelycode.com)組織翻譯&#xff0c;禁止轉載&#xff0c;歡迎轉發。 作者&#xff1a;Omer Lachish 最近&#xff0c;我們已經開始使用RQ庫代替Celery庫作為我們的任務運行引擎。第一階段&#xff0c;我們只遷移了那些不直接進行查詢工作的任務。這些任務包…

easyui $.parser.parse 頁面重新渲染

一些dom元素是動態拼接上的easui的樣式&#xff0c;由于頁面已經渲染過了&#xff0c;所以需要手動執行渲染某個部件或者整個頁面 $.parser.parse(); // parse all the page $.parser.parse(#cc); // parse the specified node $.parser.parse($("#grid").parent());…

Java EE6裝飾器:在注入時裝飾類

軟件中常見的設計模式是裝飾器模式 。 我們上一堂課&#xff0c;然后在它周圍包裝另一堂課。 這樣&#xff0c;當我們調用類時&#xff0c;我們總是在到達內部類之前經過周圍的類。 Java EE 6允許我們通過CDI創建裝飾器&#xff0c;作為其AOP功能的一部分。 如果我們想實現仍然…

C語言代碼規范(六)浮點型變量邏輯比較

無論是float還是double類型的變量&#xff0c;都有精度限制。所以一定要避免將浮點變量用""或"!"與數字比較&#xff0c;應該設法轉化成為">"或"<"形式。 不建議使用的例子&#xff1a; if(0.0 x) if(0.0 ! x) 強烈推薦的例…

圖靈機器人調用數據恢復_機器人也能撩妹?python程序員自制微信機器人,替他俘獲女神芳心...

機器人也有感情還記得王傳君飾演的《星語心愿之再愛》這部電影嗎&#xff1f;王傳君飾演的天才程序員“王鵬鵬”因工作原因不能陪伴照顧身在異地的女朋友“林亦男”&#xff0c;呆萌宅男“王鵬鵬”開發出一款以自己為原型的“王鵬鵬8.0”程序去陪伴異地戀的女友&#xff0c;后來…

Spark排錯與優化

一. 運維 1. Master掛掉,standby重啟也失效 Master默認使用512M內存&#xff0c;當集群中運行的任務特別多時&#xff0c;就會掛掉&#xff0c;原因是master會讀取每個task的event log日志去生成spark ui&#xff0c;內存不足自然會OOM&#xff0c;可以在master的運行日志中看到…

在MySQL上使用帶密碼的GlassFish JDBC安全性

我在該博客上最成功的文章之一是有關在GlassFish上使用基于表單的身份驗證來建立JDBC安全領域的文章 。 對這篇文章的一些評論使我意識到&#xff0c;要真正使它安全&#xff0c;應該做的還很多。 開箱即用的安全性 圖片&#xff1a; TheKenChan &#xff08; CC BY-NC 2.0 &a…

mgo寫入安全機制

mgo寫入安全機制 mongo寫入安全mgo寫入安全mongo寫入安全 mongo本身也有一整套的寫入安全機制,但是在這篇的內容里只介紹一小部分相關部分.先放一個鏈接可以跳過本節不看直接看這個 鏈接. WriteConcern.NONE:沒有異常拋出WriteConcern.NORMAL:僅拋出網絡錯誤異常&#xff0c;沒…