配置类【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】,然后就开始在上下文的【BeanFactory】中寻找类型为【HasFeatures】的Bean定义。

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

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

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

配置类【RibbonAutoConfiguration】的实例属性【configurations】是如何注入的?---实例化_第1张图片

配置类【RibbonAutoConfiguration】的实例属性【configurations】是如何注入的?---实例化_第2张图片

配置类【RibbonAutoConfiguration】的实例属性【configurations】是如何注入的?---实例化_第3张图片

配置类【RibbonAutoConfiguration】的实例属性【configurations】是如何注入的?---实例化_第4张图片

配置类【RibbonAutoConfiguration】的实例属性【configurations】是如何注入的?---实例化_第5张图片

配置类【RibbonAutoConfiguration】的实例属性【configurations】是如何注入的?---实例化_第6张图片

配置类【RibbonAutoConfiguration】的实例属性【configurations】是如何注入的?---实例化_第7张图片

配置类【RibbonAutoConfiguration】的实例属性【configurations】是如何注入的?---实例化_第8张图片

配置类【RibbonAutoConfiguration】的实例属性【configurations】是如何注入的?---实例化_第9张图片

配置类【RibbonAutoConfiguration】的实例属性【configurations】是如何注入的?---实例化_第10张图片

配置类【RibbonAutoConfiguration】的实例属性【configurations】是如何注入的?---实例化_第11张图片

配置类【RibbonAutoConfiguration】的实例属性【configurations】是如何注入的?---实例化_第12张图片

配置类【RibbonAutoConfiguration】的实例属性【configurations】是如何注入的?---实例化_第13张图片

配置类【RibbonAutoConfiguration】的实例属性【configurations】是如何注入的?---实例化_第14张图片

配置类【RibbonAutoConfiguration】的实例属性【configurations】是如何注入的?---实例化_第15张图片

配置类【RibbonAutoConfiguration】的实例属性【configurations】是如何注入的?---实例化_第16张图片

配置类【RibbonAutoConfiguration】的实例属性【configurations】是如何注入的?---实例化_第17张图片

配置类【RibbonAutoConfiguration】的实例属性【configurations】是如何注入的?---实例化_第18张图片

配置类【RibbonAutoConfiguration】的实例属性【configurations】是如何注入的?---实例化_第19张图片

配置类【RibbonAutoConfiguration】的实例属性【configurations】是如何注入的?---实例化_第20张图片

配置类【RibbonAutoConfiguration】的实例属性【configurations】是如何注入的?---实例化_第21张图片

配置类【RibbonAutoConfiguration】的实例属性【configurations】是如何注入的?---实例化_第22张图片

配置类【RibbonAutoConfiguration】的实例属性【configurations】是如何注入的?---实例化_第23张图片

配置类【RibbonAutoConfiguration】的实例属性【configurations】是如何注入的?---实例化_第24张图片

配置类【RibbonAutoConfiguration】的实例属性【configurations】是如何注入的?---实例化_第25张图片

配置类【RibbonAutoConfiguration】的实例属性【configurations】是如何注入的?---实例化_第26张图片

配置类【RibbonAutoConfiguration】的实例属性【configurations】是如何注入的?---实例化_第27张图片

配置类【RibbonAutoConfiguration】的实例属性【configurations】是如何注入的?---实例化_第28张图片

配置类【RibbonAutoConfiguration】的实例属性【configurations】是如何注入的?---实例化_第29张图片

配置类【RibbonAutoConfiguration】的实例属性【configurations】是如何注入的?---实例化_第30张图片

配置类【RibbonAutoConfiguration】的实例属性【configurations】是如何注入的?---实例化_第31张图片

配置类【RibbonAutoConfiguration】的实例属性【configurations】是如何注入的?---实例化_第32张图片

配置类【RibbonAutoConfiguration】的实例属性【configurations】是如何注入的?---实例化_第33张图片

配置类【RibbonAutoConfiguration】的实例属性【configurations】是如何注入的?---实例化_第34张图片

配置类【RibbonAutoConfiguration】的实例属性【configurations】是如何注入的?---实例化_第35张图片

配置类【RibbonAutoConfiguration】的实例属性【configurations】是如何注入的?---实例化_第36张图片

配置类【RibbonAutoConfiguration】的实例属性【configurations】是如何注入的?---实例化_第37张图片

配置类【RibbonAutoConfiguration】的实例属性【configurations】是如何注入的?---实例化_第38张图片

配置类【RibbonAutoConfiguration】的实例属性【configurations】是如何注入的?---实例化_第39张图片

配置类【RibbonAutoConfiguration】的实例属性【configurations】是如何注入的?---实例化_第40张图片

配置类【RibbonAutoConfiguration】的实例属性【configurations】是如何注入的?---实例化_第41张图片

配置类【RibbonAutoConfiguration】的实例属性【configurations】是如何注入的?---实例化_第42张图片

配置类【RibbonAutoConfiguration】的实例属性【configurations】是如何注入的?---实例化_第43张图片

配置类【RibbonAutoConfiguration】的实例属性【configurations】是如何注入的?---实例化_第44张图片

配置类【RibbonAutoConfiguration】的实例属性【configurations】是如何注入的?---实例化_第45张图片

配置类【RibbonAutoConfiguration】的实例属性【configurations】是如何注入的?---实例化_第46张图片

你可能感兴趣的:(配置类【RibbonAutoConfiguration】的实例属性【configurations】是如何注入的?---实例化)