分析三个步骤
创建容器
1.设置reader,scanner,beanFactory
准备容器
一、设置context的environment
二、如果存在开发主动设置的beanNameGenerator,resourceLoader就替换原有的这两个属性
三、设置ContextInitializer
DelegatingApplicationContextInitializer
-1.获取environment的属性context.initializer.classes锁对应的class(ApplicationContextInitializer)数组
-2.同时要保证ApplicationContextInitializer的参数泛型能处理context
-3.实例化ApplicationContextInitializer的数组
-4.依次调用这些ApplicationContextInitializer的initialize方法
-5.目前这个方法只是增加了一个扩展点,用来后期继续添加一些ApplicationContextInitializer
-6.目前spring是直接把这些class信息放置在META-INF/spring.factorie
ContextIdApplicationContextInitializer
-1.获取contextId
-2.注册单例contextId到beanFactory中
ConfigurationWarningsApplicationContextInitializer
-1.添加BeanFactoryPostProcessor---ConfigurationWarningsPostProcessor
-2.ConfigurationWarningsPostProcessor的作用-优先调用postProcessBeanDefinitionRegistry打印一些warn信息,postProcessBeanFactory是空实现,warn信息主要是检测scannedPackages,看看其是否有问题
ServerPortInfoApplicationContextInitializer
-1