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
6、在配置类【RibbonAutoConfiguration】中存在通过为方法【ribbonFeature()】添加【@Bean】生成名称为【ribbonFeature】的Bean定义,除此之外还有【eurekaFeature】和【commonsFeature】。
7、要想实例化【ribbonFeature】Bean,首先要实例化其Bean工厂【RibbonAutoConfiguration】。在实例化完Bean工厂后,还要为其注入类型为【List
8、经过上面一系列的操作后,配置类【RibbonAutoConfiguration】就完成了实例化,并且其【configurations】属性就拥有了默认和自定义的三个客户端配置项。