Spring启动整个流程
1. 构造函数:
a. 父类构造函数初始化BeanFactory,本类构造函数初始化读取器和扫描器,读取器的核心就是注册spring内置的bean,就是把BeanName和BeanDefinition放到一个map里也就是BeanFactory,这里注册了好几个bean,最重要的是BeanDefinitionRegistryPostProcessor Bean,BeanDefinitionRegistryPostProcessor接口又扩展了BeanFactoryPostProcessor接口,BeanFactoryPostProcessor是Spring的扩展点之一
2. Register
a. 将符合spring规则的bean进行注册,包括@Component和@Configuration,
b. 解析和注册配置类,把每个类的BeanName和BeanDefinition放到BeanFactory里
3. Refresh
这里面几个重要的方法:
a. invokeBeanFactoryPostProcessors(beanFactory); 执行自己的和内置的BeanFactoryPostProcessor
b. registerBeanPostProcessors(beanFactory);包括AOP的实现,也在这里注册一个后置处理器
c. finishBeanFactoryInitialization(beanFactory);(这里来到了我们的bean实例化过程)
初始化所有非`懒加载对象,beanFactory.preInstantiateSin`gletons();,然后到getBean,然后到doGetBean,然后到createBean,到doCreateBean,初始化bean,注入属性,setbeanname,setbeanclassloader,setbeanfactory,init前的后置处理器,afterpropritesset,初始化,init后的后置处理器,destory,销毁