likes
comments
collection
share

ImportSelector在哪里回调的

作者站长头像
站长
· 阅读数 25

今天在研究SpringBoot的时候,看见@EnableAutoConfiguration上面有一个@Import,里面引入了AutoConfigurationImportSelector.class,一看后缀名就知道是要注册Bean用的。但是忘记了什么时候获取处理这种ImportSelector。然后就去翻翻了代码。

流程如下:

1.主类 ImportSelector在哪里回调的 2.完成SpringBoot后调用run,在run方法里有一个刷新容器的操作 ImportSelector在哪里回调的 3.SpringBoot的刷新容器最后会委托给AbstractApplicationConext的refresh,而refresh里面有一步操作时执行BeanFactoryPostProcessors ImportSelector在哪里回调的 4.进入里面会委托PostProcessorRegistrationDelegate执行,然后会依次回调方法 ImportSelector在哪里回调的 5.当前执行postProcessor是ConfigurationClassPostProcessor,然后ConfigurationClassPostProcessor回去调用自身的processConfigBeanDefinitions,里面会去创建一个ConfigurationClassParser,这个对象就纯手工new出来的 ImportSelector在哪里回调的 6.然后调用ConfigurationClassParser的parse,经过一大堆的调用,最后会来到doProcessConfigurationClass这个方法,里面会处理@PropertySource、@ComponentScan、@Import、@ImportResource等 ImportSelector在哪里回调的 7.进入processImports方法 ImportSelector在哪里回调的 这里面有个小东西,会优先执行一下XXXAware的回调,然后才去处理ImportSelector的回调,这个方法不光处理Import和ImportSelector,也会去处理ImportBeanDefinitionRegister

Spring里面有很多XXXAware接口、XXXBeanFactoryPostProcessor接口、XXXBeanPostProcessor接口,这接口的回调是有一定的区别的,就算是xxxBeanPostProcessor这种的,也有的会分时机去回调。 刚入门Spring,如果对一些理解或概念有误的话,烦请指正。