Spring源码总结前

1.在父类的构造方法中创建Bean工厂名字叫做DefaultListableBeanFactory
2.this.reader = new AnnotatedBeanDefinitionReader(this);
在Bean工厂中创建了6个bd
3.this.scanner = new ClassPathBeanDefinitionScanner(this);
但是此时这个scanner没什么用处 仅仅是程序员可以在外部调用
以后会说
invokeBeanFactoryPostProcessors(beanFactory);
主要说下这个方法
List regularPostProcessors
List registryProcessors
ist currentRegistryProcessors
这里定义了 3个集合
1.是程序员自己实现的BeanFactoryPostProcessor
2.是程序员自己实现的BeanDefinitionRegistryPostProcessor
3.是Spring实现的BeanDefinitionRegistryPostProcessor

/-----------------
然后调用它
invokeBeanDefinitionRegistryPostProcessors(currentRegistryProcessors, registry);
此时遍历一个集合实现.postProcessBeanDefinitionRegistry(registry);

Spring源码总结前

再之后调用这个方法,
1.是吧所有的BdName拿出来
2.是判断符合不符合标准

Spring源码总结前
什么为符合标准呢就是加了
@Configuration-------> full
@Component
@ComponentScan----------->late
@Import
@ImportResource

Spring源码总结前
很明显 此时我们的configCandidates 只有一个就是Appconfig,
下面开始我们的包扫描
Spring源码总结前
Set scannedBeanDefinitions =
this.componentScanParser.parse(componentScan, sourceClass.getMetadata().getClassName());.
这个方法就能吧我们的@Component扫描出来,并且加入到Spring容器的map中
Spring源码总结前
接下来就开始处理@Import注解
我说了 解析3种类型的注解