1. DefaultListableBeanFactory的作用:
默认实现了ListableBeanFactory和BeanDefinitionRegistry接口,基于bean definition对象,是一个成熟的bean factroy。
最典型的应用是:在访问bean前,先注册所有的definition(可能从bean definition配置文件中)。使用预先建立的bean定义元数据对象,从本地的bean definition表中查询bean definition因而将不会花费太多成本。
DefaultListableBeanFactory既可以作为一个单独的beanFactory,也可以作为自定义beanFactory的父类。
2.ConfigurationClassPostProcessor最重要的核心后置处理器之一
a、核心流程的入口
b、注解的收集
c、ImportSelector接口和DeferredImportSelector接口和ImportBeanDefinitionRegistrar接口
d、其他注解的收集
e、注册BeanDefinition
f、处理@Configuration注解
1、解析被@Configuration修饰的配置类
这里是首先是启动类加入了容器,所以只有启动类扫描到@Configuration
parse().doProcessConfigurationClass()会解析启动类其它@PropertySource、@ComponentScan、@Import、@ImportResource、@Bean其它注解
2、解析@ComponentScan扫描的包
解析到启动类没有配置默认basePackages,会把启动类包路径作为basePackages
if (basePackages.isEmpty()) { basePackages.add(ClassUtils.getPackageName(declaringClass)); }
然后会doScan()扫描目录下所有class,判断是否@component(@servic、@controller等等底层都是@component)注解,有则加入beanDefinitions
3、解析被@Import注解修饰的类
会递归寻找@import注解引入的类,然后加入到有则加入beanDefinitions,
springboot就是原理在这个过程中通过解析spring.factories文件获取所有引入的class
4、解析被@bean注解修饰的类
3.ServletWebServerFactoryAutoConfiguration 默认tomcat作为springboot容器
AbstractApplicationContext#onRefresh()会调用ServletWebServerApplicationContext创建tomcat
AbstractApplicationContext#finishRefresh()完成启动