个人总结:
首先有一个读取接口,读取某一个包下的所有类,然后跟据扫描器,扫描器扫描带有@Component或者@Configuration或者xml文件等等的类,然后在跟据注册器将这些类注册成一个个Bean定义放入一个集合中,然后我们的ApplicationContent可以调用Bean工厂的后置处理器去处理我们的Bean定义,(记住ApplicationContent实现了BeanFactory接口),然后我们的BeanFactory使用简单的工厂设计模式通过getBean方法生产Bean(getBean既可以获取Bean也可以生产Bean),然后会实例化Bean,接着填充属性,最后初始化Bean(初始化会调用一堆Aware),然后将初始化好的Bean放入一级缓存中也就是Map。Bean也有他的后置和前置处理器。
BeanFactory和ApplicationContext的区别
首先共同点都能创建Bean。区别在于BeanFactory是一台无情的生产机器,而ApplicationContext它有很多的扩展节点去处理Bean定义比如Bean的后置处理器。而BeanFactory直接是跟据Bean定义生产Bean不能对Bean定义做一些操作。