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

http調(diào)用controller方法時openfeign執(zhí)行流程

 更新時間:2023年07月06日 09:23:50   作者:子瞻  
這篇文章主要為大家介紹了http調(diào)用controller方法時openfeign執(zhí)行流程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

http調(diào)用controller的方法時

當我們通過http調(diào)用controller的方法時,openfeign的執(zhí)行流程如下圖所示:

圖1

首先,我們比較關(guān)心的是,我們顯式聲明的DemoFeignClient類會被spring容器創(chuàng)建代理對象

具體的創(chuàng)建的流程是怎樣的?

圖2

紅色方框1標明項目啟動成過程中spring容器先掃描所有的資源文件轉(zhuǎn)換為對目標類進行描述RootBeandefinition,然后@SpringBootApplication注解將聲明的類加載到DefaultListableBeanFacrory中,此時spring框架執(zhí)行org.springframework.beans.factory.support.AbstractBeanFactory.getBean(),最終通過org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean()里面的

//執(zhí)行bean創(chuàng)建的核心邏輯        
instanceWrapper = createBeanInstance(beanName, mbd, args);

完成bean創(chuàng)建工作。然后通過org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessProperties()注入屬性。

public PropertyValues postProcessProperties(PropertyValues pvs, Object bean, String beanName) {
        //獲取屬性信息
        InjectionMetadata metadata = findResourceMetadata(beanName, bean.getClass(), pvs);
        try {
            //執(zhí)行屬性注入邏輯
            metadata.inject(bean, beanName, pvs);
        }
        catch (Throwable ex) {
            throw new BeanCreationException(beanName, "Injection of resource dependencies failed", ex);
        }
        return pvs;
    }

在執(zhí)行contoller類的屬性注入過程中,發(fā)現(xiàn)DemoFeignClient這個bean還沒有被創(chuàng)建,因此需要遞歸創(chuàng)建emoFeignClient實例,我們推測一下肯定是要再執(zhí)行一次創(chuàng)建bean的邏輯,流程不再贅述!

圖3

由上圖可以發(fā)現(xiàn),spring框架創(chuàng)建DemoFeignClient實例是,通過描述它的RootBeanDefinition類中獲取instanceSupplier,這里的值是FeignClientsRegistrar實例
FeignClientsRegistrar實例有FeignClientFacoryBean實例,然后通過FeignClientFacoryBean.getObject()方法進行真正的Feign實例。

ReflectiveFeign.newInstance()創(chuàng)建代理類

public <T> T newInstance(Target<T> target) {
    //DemoFeignClient 的方法信息 key 方法名稱 value method信息
    Map<String, MethodHandler> nameToHandler = targetToHandlersByName.apply(target);
    Map<Method, MethodHandler> methodToHandler = new LinkedHashMap<Method, MethodHandler>();
    List<DefaultMethodHandler> defaultMethodHandlers = new LinkedList<DefaultMethodHandler>();
    for (Method method : target.type().getMethods()) {
      if (method.getDeclaringClass() == Object.class) {
        continue;
      } else if (Util.isDefault(method)) {
        DefaultMethodHandler handler = new DefaultMethodHandler(method);
        defaultMethodHandlers.add(handler);
        methodToHandler.put(method, handler);
      } else {
        methodToHandler.put(method, nameToHandler.get(Feign.configKey(target.type(), method)));
      }
    }
    InvocationHandler handler = factory.create(target, methodToHandler);
    //創(chuàng)建DemoClient代理類
    T proxy = (T) Proxy.newProxyInstance(target.type().getClassLoader(),
        new Class<?>[] {target.type()}, handler);
    for (DefaultMethodHandler defaultMethodHandler : defaultMethodHandlers) {
      defaultMethodHandler.bindTo(proxy);
    }
    return proxy;
  }

至此,DemoFeignClient實例創(chuàng)建完成。接著我們定義的Controller就可以完成demoFeignClient 屬性注入工作了。項目啟動完成之后,當有http請求的時候,loadbalancer就通過負載均衡算法獲取服務(wù)實例,通過openfeign進行遠程調(diào)用獲取我們想要的數(shù)據(jù)了。

以上就是http調(diào)用controller方法時openfeign執(zhí)行流程的詳細內(nèi)容,更多關(guān)于openfeign執(zhí)行流程的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java使用validation攔截非法提交的數(shù)據(jù)的方法實現(xiàn)

    Java使用validation攔截非法提交的數(shù)據(jù)的方法實現(xiàn)

    這篇文章主要介紹了Java使用validation攔截非法提交的數(shù)據(jù),包含依賴引入、實體類注解配置、控制器@Valid/@Validated使用規(guī)范,具有一定的參考價值,感興趣的可以了解一下
    2025-07-07
  • Java如何使用逆波蘭式(后綴表達式)計算表達式的值

    Java如何使用逆波蘭式(后綴表達式)計算表達式的值

    這篇文章主要介紹了Java如何使用逆波蘭式(后綴表達式)計算表達式的值,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • Java利用redis限制用戶頻繁點擊操作

    Java利用redis限制用戶頻繁點擊操作

    文章討論了如何使用Redis和攔截器來限制用戶行為,以保障系統(tǒng)安全,具體來說,作者提出了一種解決方案,包括使用注解來精確限制用戶行為,并 使用攔截器記錄并處理用戶行為,文章還指出,需要添加crosFilter方法來解決攔截器的跨域問題
    2026-04-04
  • Java的異常類型總結(jié)

    Java的異常類型總結(jié)

    在本篇文章里小編給大家分享了關(guān)于Java的異常類型的相關(guān)知識點內(nèi)容,有需要的朋友們跟著學(xué)習(xí)下。
    2019-01-01
  • spring?cloud中Feign導(dǎo)入jar失敗的問題及解決方案

    spring?cloud中Feign導(dǎo)入jar失敗的問題及解決方案

    這篇文章主要介紹了spring?cloud中Feign導(dǎo)入jar失敗的問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • jenkins配置詳細指南(附j(luò)dk多個版本配置)

    jenkins配置詳細指南(附j(luò)dk多個版本配置)

    Jenkins是一款CICD(持續(xù)集成與持續(xù)交付)工具,Jenkins可以幫你在寫完代碼后,一鍵完成開發(fā)過程中的一系列自動化部署的工作,這篇文章主要給大家介紹了關(guān)于jenkins配置的相關(guān)資料,文中還附j(luò)dk多個版本配置指南,需要的朋友可以參考下
    2024-02-02
  • Java深入學(xué)習(xí)圖形用戶界面GUI之創(chuàng)建窗體

    Java深入學(xué)習(xí)圖形用戶界面GUI之創(chuàng)建窗體

    圖形編程中,窗口是一個重要的概念,窗口其實是一個矩形框,應(yīng)用程序可以使用其從而達到輸出結(jié)果和接受用戶輸入的效果,學(xué)習(xí)了GUI就讓我們用它來創(chuàng)建一個窗體
    2022-05-05
  • Java異常處理的最佳實踐指南

    Java異常處理的最佳實踐指南

    異常處理是軟件開發(fā)中的關(guān)鍵環(huán)節(jié),良好的異常處理策略能提高系統(tǒng)的穩(wěn)定性、可維護性和用戶體驗,以下是項目中異常處理的全面指南,需要的朋友可以參考下
    2025-09-09
  • Spring boot監(jiān)控Actuator-Admin實現(xiàn)過程詳解

    Spring boot監(jiān)控Actuator-Admin實現(xiàn)過程詳解

    這篇文章主要介紹了Spring boot監(jiān)控Actuator-Admin實現(xiàn)過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-09-09
  • SpringBoot?屬性配置中獲取值的方式

    SpringBoot?屬性配置中獲取值的方式

    這篇文章主要介紹了SpringBoot?屬性配置中獲取值的方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02

最新評論

怀柔区| 道孚县| 灵石县| 榆树市| 南澳县| 井陉县| 汪清县| 灌云县| 台州市| 绥中县| 武城县| 潼南县| 文成县| 韶山市| 东丰县| 通榆县| 中牟县| 广平县| 温州市| 乌拉特中旗| 四平市| 泉州市| 临猗县| 普定县| 桂东县| 苍山县| 磐石市| 定结县| 双鸭山市| 太仆寺旗| 宜君县| 高邑县| 互助| 左权县| 新巴尔虎左旗| 葫芦岛市| 琼结县| 西丰县| 金昌市| 安宁市| 辽源市|