• 配置类【RibbonAutoConfiguration】的实例属性【configurations】是如何注入的?---实例化


    1、Tomcat启动【Web】应用时要默认实例化【ServletContextInitializer】类型的Bean定义,类【ServletEndpointRegistrar】实现了该接口。

    2、包【spring.boot.actuator.autoconfigure】中的内部静态配置类【ServletEndpointManagementContextConfiguration.WebMvcServletEndpointManagementContextConfiguration】通过【@Bean】注解的方法【servletEndpointRegistrar()】定义了该类,所以该配置类中的Bean定义在启动时要实例化。

    3、在实例化【ServletEndpointRegistrar】的过程中要通过【ServletEndpointsSupplier】的方法【getEndpoints()】获取所有的服务端点,即被【@Endpoint】注解。

    4、其中就有一个类【FeaturesEndpoint】被【@Endpoint】注解,并在内部静态配置类【CommonsClientAutoConfiguration.ActuatorConfiguration】中通过方法【featuresEndpoint()】被【@Bean】注解的方式生成了名称为【featuresEndpoint】的Bean定义。

    5、为了实例化该Bean,就要实例化该Bean的工厂类,即内部静态配置类【CommonsClientAutoConfiguration.ActuatorConfiguration】。实例化完之后就要为其注入类型为【List<HasFeatures>】的属性【hasFeatures】,然后就开始在上下文的【BeanFactory】中寻找类型为【HasFeatures】的Bean定义。

    6、在配置类【RibbonAutoConfiguration】中存在通过为方法【ribbonFeature()】添加【@Bean】生成名称为【ribbonFeature】的Bean定义,除此之外还有【eurekaFeature】和【commonsFeature】。

    7、要想实例化【ribbonFeature】Bean,首先要实例化其Bean工厂【RibbonAutoConfiguration】。在实例化完Bean工厂后,还要为其注入类型为【List<RibbonClientSpecification>】的属性【configurations】。然后就开始在上下文的【BeanFactory】中寻找类型为【RibbonClientSpecification】的Bean并进行注入。

    8、经过上面一系列的操作后,配置类【RibbonAutoConfiguration】就完成了实例化,并且其【configurations】属性就拥有了默认和自定义的三个客户端配置项。

    clip_image001[4]

    clip_image002[4]

    clip_image003[4]

    clip_image004[4]

    clip_image005[4]

    clip_image006[4]

    clip_image007[4]

    clip_image008[4]

    clip_image009[4]

    clip_image010[4]

    clip_image011[4]

    clip_image012[4]

    clip_image013[4]

    clip_image014[4]

    clip_image015[4]

    clip_image016[4]

    clip_image017[4]

    clip_image018[4]

    clip_image019[4]

    clip_image020[4]

    clip_image021[4]

    clip_image022[4]

    clip_image023[4]

    clip_image024[4]

    clip_image025

    clip_image026

    clip_image027

    clip_image028

    clip_image029

    clip_image030

    clip_image031

    clip_image032

    clip_image033

    clip_image034

    clip_image035

    clip_image036

    clip_image037

    clip_image038

    clip_image039

    clip_image040

    clip_image041

    clip_image042

    clip_image043

    clip_image044

    clip_image045

    clip_image046

  • 相关阅读:
    ansible设置串行的方法
    给k8s集群中的node节点加标签
    Prometheus断电后启动异常 Error on ingesting samples
    配置 containerd 镜像仓库完全攻略
    这款网络排查工具,堪称神器!
    k8s备份工具之velero
    CentOS 7安装megacli
    Atitit .h5文件上传 v3
    php切片处理视频大文件思路
    php切片处理视频大文件功能
  • 原文地址:https://www.cnblogs.com/StarkBrothers/p/12158473.html
Copyright © 2020-2023  润新知