最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring?Boot?@Autowired?@Resource屬性賦值時(shí)機(jī)探究

 更新時(shí)間:2023年07月06日 10:49:27   作者:子瞻  
這篇文章主要為大家介紹了Spring?Boot?@Autowired?@Resource屬性賦值時(shí)機(jī),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

@Resource

先貼出測(cè)試類(lèi)

@Service
public class TransactionServiceTest {
    @Resource
    private IQrcodeAdScheduleService qrcodeAdScheduleService;
}

Spring Boot啟動(dòng)之后調(diào)用棧信息

圖1

圖2

由圖1,圖2可知InjectionMetadata.inject()執(zhí)行屬性織入邏輯,下面是部分細(xì)節(jié)

protected void inject(Object target, @Nullable String requestingBeanName, @Nullable PropertyValues pvs)
                throws Throwable {
            if (this.isField) {
                Field field = (Field) this.member;
                ReflectionUtils.makeAccessible(field);
                //通過(guò)反射對(duì)目標(biāo)target對(duì)象也就是我們之前定義的TransactionServiceTest的屬性賦值
                field.set(target, getResourceToInject(target, requestingBeanName));
            }
}

其中,CommonAnnotationBeanPostProcessor.ResourceElement的member屬性存儲(chǔ)的是Filed信息,對(duì)于本示例就是:

圖3

@Autowired

對(duì)于@Autowired來(lái)說(shuō),就是AutowiredAnnotationBeanPostProcessor.AutowiredFieldElement.inject():

protected void inject(Object bean, @Nullable String beanName, @Nullable PropertyValues pvs) throws Throwable {
            Field field = (Field) this.member;
            Object value;
            if (this.cached) {
                value = resolvedCachedArgument(beanName, this.cachedFieldValue);
            }
            else {
                DependencyDescriptor desc = new DependencyDescriptor(field, this.required);
                desc.setContainingClass(bean.getClass());
                Set<String> autowiredBeanNames = new LinkedHashSet<>(1);
                Assert.state(beanFactory != null, "No BeanFactory available");
                TypeConverter typeConverter = beanFactory.getTypeConverter();
                try {
                    //遞歸調(diào)用createBean()實(shí)例化目標(biāo)bean的屬性bean實(shí)例
                    value = beanFactory.resolveDependency(desc, beanName, autowiredBeanNames, typeConverter);
                }
                catch (BeansException ex) {
                    throw new UnsatisfiedDependencyException(null, beanName, new InjectionPoint(field), ex);
                }
                synchronized (this) {
                    if (!this.cached) {
                        if (value != null || this.required) {
                            this.cachedFieldValue = desc;
                            registerDependentBeans(beanName, autowiredBeanNames);
                            if (autowiredBeanNames.size() == 1) {
                                String autowiredBeanName = autowiredBeanNames.iterator().next();
                                if (beanFactory.containsBean(autowiredBeanName) &&
                                        beanFactory.isTypeMatch(autowiredBeanName, field.getType())) {
                                    this.cachedFieldValue = new ShortcutDependencyDescriptor(
                                            desc, autowiredBeanName, field.getType());
                                }
                            }
                        }
                        else {
                            this.cachedFieldValue = null;
                        }
                        this.cached = true;
                    }
                }
            }
            if (value != null) {
                //通過(guò)field進(jìn)行賦值
                ReflectionUtils.makeAccessible(field);
                field.set(bean, value);
            }
        }
}

其他的流程一毛一樣啊~

以上就是Spring Boot @Autowired @Resource屬性賦值時(shí)機(jī)探究的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot @Autowired @Resource的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java EasyExcel讀寫(xiě)excel如何解決poi讀取大文件內(nèi)存溢出問(wèn)題

    Java EasyExcel讀寫(xiě)excel如何解決poi讀取大文件內(nèi)存溢出問(wèn)題

    這篇文章主要介紹了Java EasyExcel讀寫(xiě)excel如何解決poi讀取大文件內(nèi)存溢出問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • 淺談Java springboot日志管理

    淺談Java springboot日志管理

    這篇文章主要介紹了淺談Java springboot日志管理,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)Java的小伙伴們有很好的幫助喲,需要的朋友可以參考下
    2021-05-05
  • SpringBoot + JPA @ManyToMany的操作要點(diǎn)說(shuō)明

    SpringBoot + JPA @ManyToMany的操作要點(diǎn)說(shuō)明

    這篇文章主要介紹了SpringBoot + JPA @ManyToMany的操作要點(diǎn)說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • Java線(xiàn)程中斷的本質(zhì)深入理解

    Java線(xiàn)程中斷的本質(zhì)深入理解

    Java的中斷是一種協(xié)作機(jī)制。也就是說(shuō)調(diào)用線(xiàn)程對(duì)象的interrupt方法并不一定就中斷了正在運(yùn)行的線(xiàn)程,它只是要求線(xiàn)程自己在合適的時(shí)機(jī)中斷自己,本文將詳細(xì)介紹,需要了解的朋友可以參考下
    2012-12-12
  • SpringBoot在項(xiàng)目停止(服務(wù)停止/關(guān)閉退出)之后執(zhí)行的方法

    SpringBoot在項(xiàng)目停止(服務(wù)停止/關(guān)閉退出)之后執(zhí)行的方法

    這篇文章主要給大家介紹了SpringBoot在項(xiàng)目停止(服務(wù)停止/關(guān)閉退出)之后執(zhí)行的兩種方法,實(shí)現(xiàn)DisposableBean接口和使用@PreDestroy注解,文中有詳細(xì)的代碼講解,具有一定的參考價(jià)值,需要的朋友可以參考下
    2023-12-12
  • Java中控制多線(xiàn)程順序執(zhí)行的六種實(shí)現(xiàn)方案

    Java中控制多線(xiàn)程順序執(zhí)行的六種實(shí)現(xiàn)方案

    在多線(xiàn)程編程中,線(xiàn)程的執(zhí)行順序本質(zhì)上是不確定的,由操作系統(tǒng)調(diào)度器決定,但在某些業(yè)務(wù)場(chǎng)景中,我們需要確保線(xiàn)程按照特定順序執(zhí)行,所以本文介紹了Java中控制多線(xiàn)程順序執(zhí)行的六種實(shí)現(xiàn)方案,需要的朋友可以參考下
    2025-09-09
  • SpringCloud Ribbon 負(fù)載均衡的實(shí)現(xiàn)

    SpringCloud Ribbon 負(fù)載均衡的實(shí)現(xiàn)

    Ribbon是一個(gè)客戶(hù)端負(fù)載均衡器,它提供了對(duì)HTTP和TCP客戶(hù)端的行為的大量控制。這篇文章主要介紹了SpringCloud Ribbon 負(fù)載均衡的實(shí)現(xiàn),感興趣的小伙伴們可以參考一下
    2019-01-01
  • 詳解Spring boot/Spring 統(tǒng)一錯(cuò)誤處理方案的使用

    詳解Spring boot/Spring 統(tǒng)一錯(cuò)誤處理方案的使用

    這篇文章主要介紹了詳解Spring boot/Spring 統(tǒng)一錯(cuò)誤處理方案的使用,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-06-06
  • java下載指定文件并返回給前端返回流文件的實(shí)現(xiàn)步驟

    java下載指定文件并返回給前端返回流文件的實(shí)現(xiàn)步驟

    在Java中我們可以根據(jù)文件地址返回一個(gè)文件流,以便對(duì)文件進(jìn)行讀取、寫(xiě)入等操作,下面這篇文章主要給大家介紹了關(guān)于java下載指定文件并返回給前端返回流文件的實(shí)現(xiàn)步驟,需要的朋友可以參考下
    2024-03-03
  • idea中打開(kāi)項(xiàng)目時(shí)import project和open區(qū)別詳解

    idea中打開(kāi)項(xiàng)目時(shí)import project和open區(qū)別詳解

    本文主要介紹了idea中打開(kāi)項(xiàng)目時(shí)import project和open區(qū)別詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06

最新評(píng)論

普定县| 达日县| 土默特右旗| 乌什县| 昭苏县| 麻城市| 龙海市| 米脂县| 大洼县| 南澳县| 塔城市| 黑龙江省| 延吉市| 富蕴县| 郯城县| 顺义区| 永安市| 宜州市| 通化市| 余干县| 马边| 扎鲁特旗| 湘阴县| 普定县| 噶尔县| 庄浪县| 鄱阳县| 武夷山市| 衡阳县| 洪雅县| 元谋县| 香格里拉县| 阿鲁科尔沁旗| 蕲春县| 屏南县| 闽清县| 繁峙县| 库伦旗| 永昌县| 开江县| 五华县|