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_image001[4]](https://img2018.cnblogs.com/blog/1850799/202001/1850799-20200106205543795-2109549765.png)
![clip_image002[4] clip_image002[4]](https://img2018.cnblogs.com/blog/1850799/202001/1850799-20200106205544857-2006438609.png)
![clip_image003[4] clip_image003[4]](https://img2018.cnblogs.com/blog/1850799/202001/1850799-20200106205545606-1473785880.png)
![clip_image004[4] clip_image004[4]](https://img2018.cnblogs.com/blog/1850799/202001/1850799-20200106205546200-638373954.png)
![clip_image005[4] clip_image005[4]](https://img2018.cnblogs.com/blog/1850799/202001/1850799-20200106205546966-680702021.png)
![clip_image006[4] clip_image006[4]](https://img2018.cnblogs.com/blog/1850799/202001/1850799-20200106205547729-1790605246.png)
![clip_image007[4] clip_image007[4]](https://img2018.cnblogs.com/blog/1850799/202001/1850799-20200106205548693-1275057847.png)
![clip_image008[4] clip_image008[4]](https://img2018.cnblogs.com/blog/1850799/202001/1850799-20200106205549670-865039399.png)
![clip_image009[4] clip_image009[4]](https://img2018.cnblogs.com/blog/1850799/202001/1850799-20200106205550443-576634098.png)
![clip_image010[4] clip_image010[4]](https://img2018.cnblogs.com/blog/1850799/202001/1850799-20200106205551059-1808700722.png)
![clip_image011[4] clip_image011[4]](https://img2018.cnblogs.com/blog/1850799/202001/1850799-20200106205551843-277854032.png)
![clip_image012[4] clip_image012[4]](https://img2018.cnblogs.com/blog/1850799/202001/1850799-20200106205552599-2082216074.png)
![clip_image013[4] clip_image013[4]](https://img2018.cnblogs.com/blog/1850799/202001/1850799-20200106205553396-1728411022.png)
![clip_image014[4] clip_image014[4]](https://img2018.cnblogs.com/blog/1850799/202001/1850799-20200106205555943-1454806011.png)
![clip_image015[4] clip_image015[4]](https://img2018.cnblogs.com/blog/1850799/202001/1850799-20200106205556908-1568132032.png)
![clip_image016[4] clip_image016[4]](https://img2018.cnblogs.com/blog/1850799/202001/1850799-20200106205557728-1322698188.png)
![clip_image017[4] clip_image017[4]](https://img2018.cnblogs.com/blog/1850799/202001/1850799-20200106205558448-1962610651.png)
![clip_image018[4] clip_image018[4]](https://img2018.cnblogs.com/blog/1850799/202001/1850799-20200106205559287-135171855.png)
![clip_image019[4] clip_image019[4]](https://img2018.cnblogs.com/blog/1850799/202001/1850799-20200106205559999-1271023510.png)
![clip_image020[4] clip_image020[4]](https://img2018.cnblogs.com/blog/1850799/202001/1850799-20200106205600666-983966374.png)
![clip_image021[4] clip_image021[4]](https://img2018.cnblogs.com/blog/1850799/202001/1850799-20200106205601507-651358116.png)
![clip_image022[4] clip_image022[4]](https://img2018.cnblogs.com/blog/1850799/202001/1850799-20200106205602476-1127467190.png)
![clip_image023[4] clip_image023[4]](https://img2018.cnblogs.com/blog/1850799/202001/1850799-20200106205603209-349492962.png)
![clip_image024[4] clip_image024[4]](https://img2018.cnblogs.com/blog/1850799/202001/1850799-20200106205604016-755363250.png)





















