為什麼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,只有徹底搞懂漏洞原因,才能以不變應萬變,小白也能看懂
- 30個類手寫Spring核心原理之自定義ORM(上)(6)