1、我们通过xml或注解或配置编写代码方式声明bean的信息.
2、Spring都会把他们解析成一个BeanDefinition。每一个Bean对应一个BeanDefinition同时注册到BeanDefinitionRegistry,抽象类AbstractBeanDefinitionReader根据注册的BeanDefinitionRegistry得到bean的所有信息.
3、接着会进入到AbstractApplicationContext 的refresh()方法,这个方法包含了很多重要的方法
4、实例化BeanFactoryPostProcessor实现类,执行BeanFactoryPostProcessor的postProcessBeanFactorty方法创建工厂,接下来就是在工厂中实例化bean的。
5、在BeanFactory工厂中会实例化BeanPostProcessor实现类和InstantiationAwareBeanPostProcessorAdapter实现类。
6、执行InstantiationAwareBeanPostProcessorAdapter的postProcessBeforeInstantoation方法,接着执行bean的构造器
7、执行InstantiationAwareBeanPostProcessorAdapter的postProcessPropertyValues方法,为Bean注入属性。
8、调用BeanNameAware的setBeanName方法,以及调用BeanFactoryAware的setBeanFactory方法。
9、执行BeanPostProcessor的postProcessBeforeInitialization方法,调用InitializingBean的afterPropertiesSet方法,调用bean的init-method属性指定的初始化方法。执行BeanPostProcessor的PostProcessAfterInitialization方法
10、容器初始化成,执行正常调用后,下面开始摧毁容器。调用DiposibleBean的destory方法,调用bean的destory-method属性指定的初始化方法
实例化过程是在docreateBean 方法中,这也是一个很重要的方法