AnnotationConfigApplicationContext

	public AnnotationConfigApplicationContext() {
		// 在执行此行代码之前, 先执行了父类的构造方法
		// 此段代码做的事情:
		// 1. 初始化bean工厂
		// 2. 初始化一个注解BeanDefinition读取器
		// 3. 将spring内置的6个类封装成RootBeanDefinition并注册到bean工厂, 
		// 具体是哪6个类可以查看上述的原理图
		this.reader = new AnnotatedBeanDefinitionReader(this);

		// 并没啥用, 虽然ClassPathBeanDefinitionScanner
		// 类的作用是扫描@ComponentScan注解提供的包路径。
		// 但实际上它并没有做扫描工作, spring内部扫描路径
		// 的时候, 是在内部新new了一个ClassPathBeanDefinitionScanner,
		// 这个属性目前没啥用, 当然我们可以获取这个对象
		// 调用它的scan方法, 但是没有必要! 因为
		// @ComponentScan可以支持多个扫描路径。 
		// 那这个类有什么用呢?跟刚刚的解释一样, 
		// 我们可以自己new一个ClassPathBeanDefinitionScanner对象或者扩展他, 
		// 利用它的扫描功能(因为它是使用ASM来扫描的)
		// Mybatis源码中就是自己扩展了
		// ClassPathBeanDefinitionScanner类
		this.scanner = new ClassPathBeanDefinitionScanner(this);
	}

this方法调用的是这个AnnotationConfigApplicationContext方法的无参构造,在调用这个方法之前会调用他的父类方法的无参构造

	public AnnotationConfigApplicationContext() {
		this.reader = new AnnotatedBeanDefinitionReader(this);
		this.scanner = new ClassPathBeanDefinitionScanner(this);
	}

AnnotationConfigApplicationContext父类GenericApplicationContext无参构造方法

	public GenericApplicationContext() {
	    // 实例化spring bean工厂: DefaultListableBeanFactory
		this.beanFactory = new DefaultListableBeanFactory();
	}