1.Spring bean的生命周期概括起来就是4个阶段:
(1)实例化(Spring 容器实例化bean)
(2)属性赋值(设置bean的相关属性和依赖)
(3)初始化
- 1.如果实现BeanNameAware接口,Spring 传递bean 的ID 到 setBeanName方法。
- 2.如果实现BeanFactoryAware接口,Spring传递beanfactory 给setBeanFactory 方法。
- 3.有任何与bean相关联的BeanPostProcessors,Spring会在postProcesserBeforeInitialization()方法内调用它们。
- 4.如果实现 initializingBean接口,调用此初始化方法。
- 5.检查是否有配置init-method方法,则执行指定的初始化方法
- 6.如果有BeanPostProcessors 和bean 关联,这些bean的postProcessAfterInitialization() 方法将被调用。
(4)销毁 - 1.如果实现DisposableBean接口,执行dispose方法
-2.如果配置了自定义的destory-method,则执行指定的销毁方法
2.spring是如何解决循环依赖问题的?
(1)spring bean的初始化分为两步:一是对象的创建,而是设置属性值
(2)当创建A对象时,ApplicationContext.getBean()从容器中取不到A的对象,便开始创建对象。创建完后,赋属性值b时,ApplicationContext.getBean()取不到b对象,于是去创建b对象。对象B创建完后,将半成品b赋值给A对象。然后当b对象赋值属性a时,调用ApplicationContext.getBean()将a的属性设置进b。
网友评论