ImportSelector在哪里回调的
今天在研究SpringBoot的时候,看见@EnableAutoConfiguration上面有一个@Import,里面引入了AutoConfigurationImportSelector.class,一看后缀名就知道是要注册Bean用的。但是忘记了什么时候获取处理这种ImportSelector。然后就去翻翻了代码。
流程如下:
1.主类
2.完成SpringBoot后调用run,在run方法里有一个刷新容器的操作
3.SpringBoot的刷新容器最后会委托给AbstractApplicationConext的refresh,而refresh里面有一步操作时执行BeanFactoryPostProcessors
4.进入里面会委托PostProcessorRegistrationDelegate执行,然后会依次回调方法
5.当前执行postProcessor是ConfigurationClassPostProcessor,然后ConfigurationClassPostProcessor回去调用自身的processConfigBeanDefinitions,里面会去创建一个ConfigurationClassParser,这个对象就纯手工new出来的
6.然后调用ConfigurationClassParser的parse,经过一大堆的调用,最后会来到doProcessConfigurationClass这个方法,里面会处理@PropertySource、@ComponentScan、@Import、@ImportResource等
7.进入processImports方法
这里面有个小东西,会优先执行一下XXXAware的回调,然后才去处理ImportSelector的回调,这个方法不光处理Import和ImportSelector,也会去处理ImportBeanDefinitionRegister
Spring里面有很多XXXAware接口、XXXBeanFactoryPostProcessor接口、XXXBeanPostProcessor接口,这接口的回调是有一定的区别的,就算是xxxBeanPostProcessor这种的,也有的会分时机去回调。 刚入门Spring,如果对一些理解或概念有误的话,烦请指正。
转载自:https://juejin.cn/post/7221792648540373053