SpringBoot复习:(42)WebServerCustomizer的customize方法是在哪里被调用的?

ServletWebServletAutoConfiguration类定义如下:
SpringBoot复习:(42)WebServerCustomizer的customize方法是在哪里被调用的?_第1张图片
可以看到其中通过@Import注解导入了其内部类BeanPostProcessorRegister。
SpringBoot复习:(42)WebServerCustomizer的customize方法是在哪里被调用的?_第2张图片
BeanPostProcessor中定义的registerBeanDefinition方法会被Spring容器调用。
SpringBoot复习:(42)WebServerCustomizer的customize方法是在哪里被调用的?_第3张图片
registerBeanDefinitions方法调用了RegistrySyntheticBeanIfMissing方法,这个方法代码如下:
SpringBoot复习:(42)WebServerCustomizer的customize方法是在哪里被调用的?_第4张图片
可以看到它把传入的参数创建成BeanDefinition对象,然后注册到了Spring容器,而这个方法第三个参数为WebServerFactoryCustomizerBeanPostProcessor,所以就向Spring容器注册了WebServerFactoryCustomizerBeanPostProcessor类型的bean,
WebServerFactoryCustomizerBeanPostProcessor代码如下:
SpringBoot复习:(42)WebServerCustomizer的customize方法是在哪里被调用的?_第5张图片

SpringBoot复习:(42)WebServerCustomizer的customize方法是在哪里被调用的?_第6张图片
因为它是BeanPostProcessor,所以它的postProcessBeforeInitialization方法会被Spring容器调用,从图中可以看到,postProcessBeforeInitialization方法调用了容器中所有实现了WebServerFactoryCustomizer接口的bean的customize方法。

你可能感兴趣的:(SpringBoot,spring,boot,java,后端)