免费观看又色又爽又黄的小说免费_美女福利视频国产片_亚洲欧美精品_美国一级大黄大色毛片

SpringAware到底是什么?-創新互聯

Spring Aware到底是什么?

堅守“ 做人真誠 · 做事靠譜 · 口碑至上 · 高效敬業 ”的價值觀,專業網站建設服務10余年為成都成都輕質隔墻板小微創業公司專業提供企業網站制作營銷網站建設商城網站建設手機網站建設小程序網站建設網站改版,從內容策劃、視覺設計、底層架構、網頁布局、功能開發迭代于一體的高端網站建設服務。

通過如下前序兩篇文章:

  1. Spring Bean 生命周期之“我從哪里來”?
  2. Spring Bean 生命周期之“我要到哪里去”?
    我們了解了 Spring Bean 的生命周期核心內容,bean 是如何被初始化變為Ready for Use的狀態,當資源被回收時又是如何被 destroy 的,但Spring Bean Life Cycle圖并未被全部點亮,這篇文章將點亮剩余內容,同時說說你常見的 XxxxAware 接口

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

Spring Aware到底是什么?

  1. 在 Spring BeanReady 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到底是什么?

這里,我們嘗試通過構造器訪問自動注入的 fieldEnvironment 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框架,但是希望看過本節內容之后閱讀框架源碼思維更加清晰

靈魂追問

  1. 框架中有哪些經典的 Aware 應用?
  2. 到現在你能很好的理解 Spring Bean 的生命周期嗎?

創新互聯www.cdcxhl.cn,專業提供香港、美國云服務器,動態BGP最優骨干路由自動選擇,持續穩定高效的網絡助力業務部署。公司持有工信部辦法的idc、isp許可證, 機房獨有T級流量清洗系統配攻擊溯源,準確進行流量調度,確保服務器高可用性。佳節活動現已開啟,新人活動云服務器買多久送多久。

本文標題:SpringAware到底是什么?-創新互聯
新聞來源:http://newbst.com/article2/dgisoc.html

成都網站建設公司_創新互聯,為您提供網站排名標簽優化Google網頁設計公司微信小程序網站制作

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

外貿網站制作