首页 > 技术文章 > 配置类【RibbonAutoConfiguration】的实例属性【configurations】是如何注入的?---实例化

StarkBrothers 2020-01-06 20:56 原文

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

推荐阅读