描述一下bean的生命周期
背图: 记住图中的流程
在表述的时候不要只说图中的有的关键点,要学会拓展描述。
1.实例化bean:反射的方式生成对象
2.填充bean的属性:populateBean(),循环依赖的问题(三级缓存)
3.调用aware接口相关的方法:invokeAwareMethod(完成BeanName,BeanFactory,BeanClassLoader对象的属性设置)。
4.调用BeanPostProcessor中的前置处理方法,使用比较多的有ApplicationContextPostProcessor,设置ApplicationContext,Environment,ResourceLoader,EmbeddValueResolver等对象。
5.调用initmethod方法:invokeInitmethod(判断是否实现了initializingBean接口,如果有,调用afterPropertiesSet方法,没有就不调用)
6.调用BeanPostProcessor的后置处理方法,spring的aop就是在此处实现的,AbstractAutoPorxyCreator,
注册Destuction相关的回调接口。
7.获取到完整的对象,可以通过getBean的方式来进行对象的获取。
8.销毁流程,1;判断是否实现了DispoableBean接口,2;调用destroyMethod方法。