中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

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

做網站解析要多久百度應用商店app下載安裝

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

一、 前言

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

二、結果驗證

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

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ā)現,此時也可以注入成功,但是執(zhí)行對象變成了父類,有經驗的大佬已經猜到是什么情況了,沒猜到的也沒有關系,我們再修改一下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("=========================");}

運行結果:

在這里插入圖片描述

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

三、原理分析

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

下面我們進行源碼跟蹤:

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

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

在這里插入圖片描述

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

在這里插入圖片描述

繼續(xù)調試,由于我們目前是字段方式注入,所以選擇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實例。

四、寫在最后

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

http://www.risenshineclean.com/news/28242.html

相關文章:

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