通过配置类方式启动spring,
- new AnnotationConfigApplicationContext()参数为配置类的class或者是包路径
-
this(); scan(basePackages); refresh();
AnnotationConfigApplicationContext类中这三个方法分别是:
**this()**调用构造器方法,先执行父类构造器,并在父类GenericApplicationContexth中创建DefaultListableBeanFactory,也就是BeanFactory的子实现类型,AnnotationConfigApplicationContext在父类创建完容器后回到自身构造器创建
private final AnnotatedBeanDefinitionReader reader;
private final ClassPathBeanDefinitionScanner scanner;这两个读取器和扫描器,这两个类中都包含BeanDefinitionRegistry这个接口类型的registry属性,而AnnotationConfigApplicationContext实现了BeanDefinitionRegistry接口,也就是说AnnotationConfigApplicationContext和两个扫描器相互依赖;
reader创建后会调用AnnotationConfigUtils.registerAnnotationConfigProcessors(this.registry);将Spring的内置后置处理器的bean定义注册到DefaultListableBeanFactory的beanDefinitionMap容器中,
而创建scanner也是类型流程;自此this()方法结束,它的作用就是创建BeanFactory容器将Spring的内置后置处理器Bean定义注册到Spring容器中