為什麼Spring中每個Bean都要定義作用域?

語言: CN / TW / HK

大家好,我是被編程耽誤的文藝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,

什麼條件下會產出死鎖,如何避免死鎖?