為什麼Spring中每個Bean都要定義作用域?
大家好,我是被程式設計耽誤的文藝Tom。
前面的影片中都有提到過Spring Bean的作用域。本期影片呢,我針對Spring Bean作用域做一個詳細的解答。關於Spring Bean的作用域,我一共分為兩個部分來介紹。首先,介紹Spring Bean作用域的定義,然後,介紹Spring為什麼要定義作用域?
咱們先來看Spring Bean作用域的定義有哪些?
1、Sprin g Bean作用域的定義
在Spring配置中,我們可以通過scope屬性來定義Spring Bean的作用域,可以接受5個內建的值,分別代表5種作用域型別,下面給大家詳細總結一下:
1、singleton,用來定義一個Bean為單例,也就是說在Spring loC容器中僅有唯一的一個例項物件,Spring中的Bean預設都是單例的。它的作用域範圍是ApplicationContext容器
2、prototype,用來定義一個Bean為多例,也就是說在每次請求獲取Bean的時都會重新建立例項,因此每次獲取到的例項物件都是不同的。它的作用域範圍是呼叫getBean方法直至獲取物件。
3、request,用來定義一個作用範圍僅在request中的Bean,也就是說在每次HTTP請求時會建立一個例項,該例項僅在當前 Request中有效。它的作用域範圍是每次發起HTTP請求直至拿到響應結果。
4、session,用來定義一個作用範圍僅在session中的Bean,也就是說在每次HTTP請求時會建立—個例項,該例項僅在當前HTTP Session中有效。它的作用域範圍是瀏覽器首次訪問至瀏覽器關閉。
5、globalSession,用來定義一個作用範圍僅在中的Bean。這種方式僅用於
應用環境,也就是說該例項僅存在於WebApplicationContext環境中。它的作用域範圍是整個WebApplicationContext容器。
第一個singleton和第二個prototype是比較常用的。其他三種僅適用於Web應用環境中,咱們也無須關心用什麼樣的框架,只需要符合J2EE規範即可生效。
這一張圖呢,是表示各種作用域範圍大小對比,其中prototype大於request大於session大於globalSession大於singleton。大家可以私信我獲取高清圖,下載下來慢慢看,幫助大家更好地理解作用域範圍。
2、Spring為什麼要定義作用域?
定義Bean的作用域,相當於使用者可以通過配置的方式限制Spring Bean的使用範圍,以起到保護Bean安全的作用。就好比孫悟空外出打妖怪前,給唐僧畫了一個圈。唐僧只有待在圈裡才能保證安全,出圈就可能會遇到危險。這樣,唐僧訪問不到圈外的資源,圈外的資源也無法觸達到唐僧,以此形成一個安全的隔離區。
在日常開發中,我們可以根據業務需要,選擇定義不同的作用域,以保護Bean的使用安全。
關於Spring Bean的作用域解析就到這裡。
S信【Tom】或【666】即可免費領取需要更多幹貨內容,還有海量面試資料,只彈乾貨不慘水!
本文為“Tom彈架構”原創,轉載請註明出處。技術在於分享,我分享我快樂!\ 如果本文對您有幫助,歡迎關注和點贊;如果您有任何建議也可留言評論或私信,您的支援是我堅持創作的動力。關注微信公眾號『 Tom彈架構 』可獲取更多技術乾貨!
關注微信公眾號『 Tom彈架構 』可獲取更多技術乾貨!往期影片已經整理成文件形式,需要的小夥伴點個關注,搜尋下方名片!我是被程式設計耽誤的文藝Tom,
- 使用橋接模式設計複雜的訊息系統
- 為什麼MySQL索引結構採用B 樹?
- 為什麼Netty執行緒池預設大小為CPU核數的2倍
- 談談你對深克隆和淺克隆的理解
- 什麼是代理,為什麼要用動態代理?
- 什麼是零拷貝,Netty是如何實現的?
- 3分鐘輕鬆理解單執行緒下的HashMap工作原理
- 被面試官問爛的Spring AOP原理,你是怎麼答的?
- Spring為何需要三級快取解決迴圈依賴,而不是二級快取?
- 為什麼Spring中每個Bean都要定義作用域?
- 談談你對Spring Bean的理解
- 趣談裝飾器模式,讓你一輩子不會忘
- 掌握這些招數,你也能寫出HR眼中的高分簡歷
- MongoDB高階應用之資料轉存與恢復(5)
- 圖解MongoDB叢集部署原理(3)
- 爆肝30天,肝出來史上最透徹Spring原理和27道高頻面試題總結
- Spring核心原理之IoC容器初體驗(2)
- Spring核心原理分析之MVC九大元件(1)
- 30個類手寫Spring核心原理之動態資料來源切換(8)
- 【緊急】Log4j又發新版2.17.0,只有徹底搞懂漏洞原因,才能以不變應萬變,小白也能看懂