中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Spring Aware的原理和作用是什么

發布時間:2021-06-30 16:20:03 來源:億速云 閱讀:198 作者:chen 欄目:大數據

本篇內容主要講解“Spring Aware的原理和作用是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Spring Aware的原理和作用是什么”吧!

為什么要說 Spring Bean 生命周期又說 Aware 呢?下來點亮剩下內容你也許就明白了:

Spring Aware的原理和作用是什么

  1. 在 Spring Bean Ready for Use之前的起源當然是要調用構造器,所以 Constructor 毋庸置疑是創建 Spring Bean 的第一步

  2. 通過 Setter 方法完成依賴注入,SDI (Setter Dependency Injection)

  3. 依賴注入一旦結束,BeanNameAware.setBeanName() 會被調用,它設置該 bean 在 Bean Factory 中的名稱

  4. 接下來調用 BeanClassLoaderAware.setBeanClassLoader() ,為 bean 實例提供類加載器,我們知道所有類都是要通過類加載器加載到上下文的,關于類的加載機制/雙親委派模型(大廠都愛問的面試題)內容會在后續給出來,讓你透徹的了解

  5. 然后 BeanFactoryAware.setBeanFactory() 會被調用為 bean 實例提供其所擁有的 factory

關于 1、2 兩點我要額外多說一些內容,請看下面代碼: Spring Aware的原理和作用是什么

這里,我們嘗試通過構造器訪問自動注入的 field Environment env,當構造器被調用時,Spring Bean 還沒被完全初始化,這就會導致 NullPointerExceptions; 我們變換一下方式: Spring Aware的原理和作用是什么

這種方式,Environment 實例被安全注入之后才調用 @PostConstruct標記的方法,這樣就不會拋出 NullPointerException 了。

這會回看周期圖,有沒有豁然開朗?

敲黑板

等所有 Spring Bean 都完成依賴注入(周期圖中的 Setter Methods 部分)再使用 bean 的引用才是安全的方式,

后續會有一個章節專門說一說面試經常被問起的 Spring 有幾種依賴注入方式的尷尬問題,請關注后續文章

到這里終于可以說一說 Aware 了,且看

Aware

Spring Aware的原理和作用是什么

Aware 翻譯過來可以理解為"察覺的;注意到的;感知的" ,XxxxAware 也就是對....感知的,沒有 Aware 就是無感知的嗎?對嘍

Spring 的依賴注入最大亮點就是所有的 Bean 對 Spring 容器的存在是沒有意識的,拿 Spring Bean 生命周期之“我從哪里來”? 文章中“小學生入少先隊”為例子說明,小學生還是那個小學生,加入少先隊還是加入共青團只不過規則不一樣罷了 但是在實際項目中,我們不可避免的要用到 Spring 容器本身提供的資源(難免要有事情需要少先隊組織的幫助),這時候要讓 Bean 主動意識到 Spring 容器的存在,才能調用 Spring 所提供的資源,這就是 Spring Aware. 其實 Spring Aware 是 Spring 設計為框架內部使用的,若使用了,你的 Bean 將會和 Spring 框架耦合,所以自己不單獨使用,但是在讀框架源碼時希望你不再模糊.

常見的 Spring Aware 接口

Aware子接口描述
BeanNameAware獲取容器中 Bean 的名稱
BeanFactoryAware獲取當前 BeanFactory ,這樣可以調用容器的服務
ApplicationContextAware同上,在BeanFactory 和 ApplicationContext 的區別 中已明確說明
MessageSourceAware獲取 Message Source 相關文本信息
ApplicationEventPublisherAware發布事件
ResourceLoaderAware獲取資源加載器,這樣獲取外部資源文件

來看類關系圖: Spring Aware的原理和作用是什么

當然不止以上這些 Aware, 通常使用 Spring Aware 的目的是為了讓 Bean 獲得 Spring 容器的服務。

代碼示例

BeanNameAware

自定義 bean 實現 BeanNameAware Spring Aware的原理和作用是什么

注冊 bean Spring Aware的原理和作用是什么

運行 Spring Aware的原理和作用是什么

和預想一樣,Bean Name 輸出結果為 myCustomBeanName,如果移除掉 @Bean 注解的 name 屬性, 輸出結果為 getMyBeanName

總結

在大多數情況下,我們應該避免使用任何 Aware 接口,除非我們需要它們。實現這些接口會將代碼耦合到Spring框架,但是希望看過本節內容之后閱讀框架源碼思維更加清晰

到此,相信大家對“Spring Aware的原理和作用是什么”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

丽江市| 调兵山市| 旺苍县| 改则县| 商水县| 阿拉善盟| 廊坊市| 万州区| 平江县| 松江区| 班戈县| 东港市| 惠州市| 贵州省| 镇沅| 杭锦后旗| 潜山县| 屏山县| 宾川县| 山阳县| 黔南| 富平县| 巨鹿县| 深州市| 磴口县| 徐水县| 五寨县| 苗栗县| 肇庆市| 平度市| 交城县| 军事| 成都市| 孝感市| 镶黄旗| 白水县| 获嘉县| 平山县| 遂川县| 克拉玛依市| 祁阳县|