国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

當前位置: 首頁 > news >正文

做網(wǎng)站解析要多久百度應(yīng)用商店app下載安裝

做網(wǎng)站解析要多久,百度應(yīng)用商店app下載安裝,網(wǎng)站開發(fā)中,wordpress熊掌號插件一、 前言 平常我們在使用spring框架開發(fā)項目過程中,會使用Autowired注解進行屬性依賴注入,一般我們都是聲明接口類型來接收接口實現(xiàn)變量,那么使用父類類型接收子類變量,可以注入成功嗎?答案是肯定可以的!…

一、 前言

平常我們在使用spring框架開發(fā)項目過程中,會使用@Autowired注解進行屬性依賴注入,一般我們都是聲明接口類型來接收接口實現(xiàn)變量,那么使用父類類型接收子類變量,可以注入成功嗎?答案是肯定可以的!

二、結(jié)果驗證

我們在項目中聲明如下三個類:

1. 測試代碼

  • TestParent
public class TestParent {protected void test() {System.out.println("I am TestParent...");}
}
  • TestSon
importorg.springframework.stereotype.Component;@Component
public class TestSon extends TestParent {publicvoidtest() {System.out.println("I am TestSon...");}
}
  • TestType
importorg.springframework.beans.factory.annotation.Autowired;
importorg.springframework.stereotype.Component;
importjavax.annotation.PostConstruct;@Component
public class TestType {@Autowiredprivate TestParent testParent;@PostConstructpublicvoidinit() {System.out.println("=========================");testParent.test();System.out.println("=========================");}
}

2. 驗證測試

啟動項目:

在這里插入圖片描述

可以看到注入成功了,說明依賴注入使用父類類型接收子類變量是沒有問題的。

3. @Autowired注解使用細節(jié)

還是上面的案例,我們修改一下TestParent類的代碼,把TestParent也交由Spring容器管理:

importorg.springframework.stereotype.Component;@Component
public class TestParent {protected void test() {System.out.println("I am TestParent...");}
}

運行測試:

在這里插入圖片描述

可以發(fā)現(xiàn),此時也可以注入成功,但是執(zhí)行對象變成了父類,有經(jīng)驗的大佬已經(jīng)猜到是什么情況了,沒猜到的也沒有關(guān)系,我們再修改一下TestType類的代碼:

importorg.springframework.beans.factory.annotation.Autowired;
importorg.springframework.stereotype.Component;
importjavax.annotation.PostConstruct;@Component
public class TestType {@Autowiredprivate TestParent test;@PostConstructpublic void init() {System.out.println("=========================");test.test();System.out.println("=========================");}

運行結(jié)果:

在這里插入圖片描述

此時居然注入報錯了,提示我們有兩個bean沖突了,不能進行依賴注入!

三、原理分析

為什么會出現(xiàn)上面的現(xiàn)象呢,是由于@Autowired注入時,是先按照類型找到bean實例名稱,再按照beanName去獲取真正需要注入的bean,如果有多個實例時,會嘗試通過需要注入的字段名稱與按照類型篩選出來的beanName對比,如果能夠?qū)Ρ瘸鑫ㄒ?code>beanName,也會按照此beanName去獲取bean實例注入,如果不能夠確定唯一bean實例,就會拋出異常了。

下面我們進行源碼跟蹤:

@Autowired注解解析的核心邏輯入口在org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor后置處理器中,我們進入該類中進行斷點調(diào)試。

通過閱讀源碼我們可以發(fā)現(xiàn),依賴注入入口方法是postProcessProperties()方法:

在這里插入圖片描述

進入org.springframework.beans.factory.annotation.InjectionMetadata#inject方法:

在這里插入圖片描述

繼續(xù)調(diào)試,由于我們目前是字段方式注入,所以選擇org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.AutowiredFieldElement類:

在這里插入圖片描述

查看方法細節(jié):

在這里插入圖片描述

我們繼續(xù)跟蹤org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.AutowiredFieldElement#resolveFieldValue方法:

在這里插入圖片描述

進入org.springframework.beans.factory.support.DefaultListableBeanFactory#resolveDependency方法:

在這里插入圖片描述

繼續(xù)進入org.springframework.beans.factory.support.DefaultListableBeanFactory#doResolveDependency方法:

在這里插入圖片描述

繼續(xù)進入org.springframework.beans.factory.support.DefaultListableBeanFactory#findAutowireCandidates方法:

在這里插入圖片描述

進入org.springframework.beans.factory.BeanFactoryUtils#beanNamesForTypeIncludingAncestors(org.springframework.beans.factory.ListableBeanFactory, java.lang.Class, boolean, boolean)看一下bean的篩選邏輯:

在這里插入圖片描述

跟蹤進入org.springframework.beans.factory.support.DefaultListableBeanFactory#doGetBeanNamesForType方法:

在這里插入圖片描述

查看類型匹配判斷方法org.springframework.beans.factory.support.AbstractBeanFactory#isTypeMatch(java.lang.String, org.springframework.core.ResolvableType, boolean)

在這里插入圖片描述

判斷核心方法org.springframework.core.ResolvableType#isInstance

在這里插入圖片描述

看到isAssignableFrom方法就知道為什么子類變量也可以成功注入父類類型了,此時子類變量也是可以成功匹配上的。

篩選出所有類型匹配的beanName以后,回到org.springframework.beans.factory.support.DefaultListableBeanFactory#findAutowireCandidates做一下是否可以進行依賴注入的判斷,返回beanName信息:

在這里插入圖片描述

然后回到org.springframework.beans.factory.support.DefaultListableBeanFactory#doResolveDependency方法中,如果有多個類型,會按照字段名稱和beanName匹配再篩選:

在這里插入圖片描述

最終確定獲取到可以注入的bean實例。

四、寫在最后

以上流程還是比較清晰的,分析過程中有一些分支流程沒有過度關(guān)注,有興趣的小伙伴也可以參考流程,自己進行debug調(diào)試分析。

http://aloenet.com.cn/news/28242.html

相關(guān)文章:

  • php做視頻網(wǎng)站有哪些軟件下載方象科技的企業(yè)愿景
  • 臨沂網(wǎng)站建設(shè)有哪些啥是網(wǎng)絡(luò)推廣
  • 專業(yè)地推團隊seo百度快速排名軟件
  • 沒有網(wǎng)站限制的瀏覽器臺州網(wǎng)站建設(shè)
  • 汕頭網(wǎng)絡(luò)公司網(wǎng)站建設(shè)朝陽網(wǎng)站seo
  • 做烘培的網(wǎng)站有哪些b2b網(wǎng)站推廣優(yōu)化
  • 什么網(wǎng)站做優(yōu)化最好外貿(mào)網(wǎng)站平臺哪個好
  • 企業(yè)發(fā)展歷程網(wǎng)站關(guān)鍵詞優(yōu)化怎么操作
  • 恐怖音樂怎么做的視頻網(wǎng)站公司網(wǎng)絡(luò)營銷推廣方案
  • 電商網(wǎng)站開發(fā)教材唐山seo
  • 學(xué)院網(wǎng)站建設(shè)管理規(guī)章制度谷歌瀏覽器官網(wǎng)入口
  • 網(wǎng)站開發(fā)功能需求表下載班級優(yōu)化大師并安裝
  • 煙臺中企動力提供網(wǎng)站建設(shè)游戲推廣論壇
  • 做設(shè)計的都用那些網(wǎng)站seo基礎(chǔ)知識
  • 推廣型網(wǎng)站建設(shè)電話百度開戶需要什么資質(zhì)
  • 漯河企業(yè)網(wǎng)站建設(shè)公司軟文廣告示范
  • 英文書 影印版 網(wǎng)站開發(fā)廈門人才網(wǎng)個人會員
  • 中國那個公司的網(wǎng)站做的最好看有什么平臺可以推廣
  • 菏澤建設(shè)局網(wǎng)站網(wǎng)絡(luò)視頻營銷平臺
  • 招商加盟類網(wǎng)站模板網(wǎng)站建設(shè)費用
  • 手機做網(wǎng)站用什么軟件灰色詞排名推廣
  • 微小店網(wǎng)站建設(shè)平臺網(wǎng)絡(luò)營銷推廣方案策劃
  • 做網(wǎng)站的要花多少錢推廣普通話作文
  • 低價網(wǎng)站建設(shè)行業(yè)現(xiàn)狀win10優(yōu)化軟件哪個好
  • 徐州網(wǎng)站優(yōu)化品牌宣傳如何做
  • 建站需要哪些東西武漢網(wǎng)絡(luò)營銷推廣
  • 住房和城鄉(xiāng)建設(shè)廳網(wǎng)站辦事大廳百度小程序?qū)W(wǎng)站seo
  • 網(wǎng)站空間購買長沙關(guān)鍵詞優(yōu)化方法
  • 雄安網(wǎng)站建設(shè)公司百度純凈版首頁入口
  • 朝陽周邊網(wǎng)站建設(shè)對seo的認識和理解