亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Spring?Boot?@Autowired?@Resource屬性賦值時機探究

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

@Resource

先貼出測試類

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

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

圖1

圖2

由圖1,圖2可知InjectionMetadata.inject()執(zhí)行屬性織入邏輯,下面是部分細節(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);
                //通過反射對目標target對象也就是我們之前定義的TransactionServiceTest的屬性賦值
                field.set(target, getResourceToInject(target, requestingBeanName));
            }
}

其中,CommonAnnotationBeanPostProcessor.ResourceElement的member屬性存儲的是Filed信息,對于本示例就是:

圖3

@Autowired

對于@Autowired來說,就是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()實例化目標bean的屬性bean實例
                    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) {
                //通過field進行賦值
                ReflectionUtils.makeAccessible(field);
                field.set(bean, value);
            }
        }
}

其他的流程一毛一樣啊~

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

相關文章

  • Java抽象類、繼承及多態(tài)和適配器的實現(xiàn)代碼

    Java抽象類、繼承及多態(tài)和適配器的實現(xiàn)代碼

    這篇文章主要介紹了Java抽象類、繼承及多態(tài)和適配器的實現(xiàn),本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-06-06
  • 使用SpringCache加Redis做緩存

    使用SpringCache加Redis做緩存

    這篇文章主要介紹了使用SpringCache加Redis做緩存方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • Java中避免NullPointerException的方法總結(jié)

    Java中避免NullPointerException的方法總結(jié)

    這篇文章主要介紹了Java中避免NullPointerException的方法總結(jié)的相關資料,需要的朋友可以參考下
    2017-07-07
  • 理解java設計模式之建造者模式

    理解java設計模式之建造者模式

    這篇文章主要幫助大家理解java設計模式之建造者模式,對建造者模式,即生成器模式進行實例講解,感興趣的朋友可以參考一下
    2016-02-02
  • Java Applet查找素數(shù)小程序代碼實例

    Java Applet查找素數(shù)小程序代碼實例

    這篇文章主要介紹了Java Applet查找素數(shù)小程序代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-02-02
  • SpringBoot實現(xiàn)抽獎算法的示例代碼

    SpringBoot實現(xiàn)抽獎算法的示例代碼

    這篇文章主要為大家詳細介紹了如何通過SpringBoot實現(xiàn)抽獎算法,文中的示例代碼簡潔易懂,具有一定的參考價值,感興趣的小伙伴可以了解一下
    2023-06-06
  • MyBatis類型處理器TypeHandler的作用及說明

    MyBatis類型處理器TypeHandler的作用及說明

    這篇文章主要介紹了MyBatis類型處理器TypeHandler的作用及說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • Java獲取一個類的隱藏屬性的幾種方法

    Java獲取一個類的隱藏屬性的幾種方法

    這篇文章主要討論了在Java中如何訪問或修改類的私有字段,包括使用公共的getter和setter方法、反射、繼承和序列化機制,文章強調(diào)了尊重類的封裝性,感興趣的小伙伴跟著小編一起來看看吧
    2025-02-02
  • java工具類之實現(xiàn)java獲取文件行數(shù)

    java工具類之實現(xiàn)java獲取文件行數(shù)

    這篇文章主要介紹了一個java工具類,可以取得當前項目中所有java文件總行數(shù),代碼行數(shù),注釋行數(shù),空白行數(shù),需要的朋友可以參考下
    2014-03-03
  • 基于JWT的spring boot權(quán)限驗證技術實現(xiàn)教程

    基于JWT的spring boot權(quán)限驗證技術實現(xiàn)教程

    這篇文章主要給大家介紹了關于基于JWT的spring boot權(quán)限驗證技術實現(xiàn)的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-11-11

最新評論