springboot默認使用的容器是AnnotationConfigEmbeddedWebApplicationContext
改容器內部使用了AnnotatedBeanDefinitionReader和ClassPathBeanDefinitionScanner
AnnotatedBeanDefinitionReader在構造函數中註冊了很多BeanFactoryPostProcessor
AnnotationConfigUtils.registerAnnotationConfigProcessors(this.registry);
其中就有一個ConfigurationClassPostProcessor
由這個ConfigurationClassPostProcessor處理springboot的啓動類的@Configuration註解
大致流程postProcessBeanDefinitionRegistry=》processConfigBeanDefinitions=》parse=》processConfigurationClass
@PropertySources @ComponentScans @Import @ImportResource @Bean 等註解都在
doProcessConfigurationClass方法中處理
再回到之前的AnnotationConfigUtils.registerAnnotationConfigProcessors(this.registry);發現裏面還註冊了其他的處理器,
AutowiredAnnotationBeanPostProcessor就是其中一個
這個註解處理@Autowired和@Value註解
postProcessBeanDefinitionRegistry 方法中解析完bean的信息之後,
會使用ConfigurationClassBeanDefinitionReader註冊bean。