添加ConfigurationClassPostProcessor 处理配置类
注解得解析 BeanDefinition 需要 BeanDefinitionReader 读取BeanDefinition
- 在调用refresh 之前 调用父类得构造方法
- 在父类得构造方法中 创建DefinitionReader
- 在 new AnnotatedBeanDefinitionReader() 得时候 使用 AnnotationConfigUtils.registerAnnotationConfigProcessors(this.registry); 在这里边就 注册了很多得beanDefinition (重要得几个如下)
- ConfigurationClassPostProcessor (配置注解后置处理器) 名字-internalConfigurationAnnotationProcessor (重要)
- AutowiredAnnotationBeanPostProcessor (自动注入后置处理器) 名字- internalAutowiredAnnotationProcessor
- CommonAnnotationBeanPostProcessor (JSR-250 annotation processor) 名字 - internalCommonAnnotationProcessor
- EventListenerMethodProcessor ( @EventListener annotation processor.)
在 refresh 的 invokeBeanFactoryPostProcessors 就开始使用 上面的 ConfigurationClassPostProcessor 解析beanDefinition 了
ConfigurationClassPostProcessor 解析BeanDefinition
是BeanDefinitionRegistryPostProcessor 的子类 所以第一步就执行 postProcessBeanDefinitionRegistry 方法
- 进入 ——>postProcessBeanDefinitionRegistry 方法
- _checkConfigurationClassCandidate 方法判断是否有 @Configuration 注解 加入 _configCandidates 中
- 创建ConfigurationClassParser 调用——>parse 方法开始解析
- 直接调入到processConfigurationClass 方法 conditionEvaluator.shouldSkip 里面判断了Conditional 注解 ——>doProcessConfigurationClass
- 首先处理了 该类里面的成员类 中的Component
- ComponentScans 和 ComponentScan 注解的处理
有两个上面两个注解 开始扫描BeanDefinition
进入 ——> this.componentScanParser.parse(componentScan, sourceClass.getMetadata().getClassName());