Spring中Bean的生命周期是一个困扰了我好久的问题,在网上找的各类五花八门的答案看的我是眼花缭乱,一头雾水,外加一大堆看不懂的代码更是搞的我云里雾里,在通过了长久的概括总结思考,终于理清了这其中的逻辑。spring
Spring Bean的生命周期其实能够围绕如下一段配置文件展开:框架
1 <bean id="student" class="com.wx.test.entity.Student"> 2 <property name="name" value="小明"/> 3 <property name="age" value="12"/> 4 </bean>
以上是一段很简单的代码,用来建立bean并注入相关属性(姓名、年龄),这就是bean的生命周期的起始。固然这只是简单的表现,Bean的生命周期实际上比这复杂,由于这其中涉及到不少接口须要去实现,这些接口咱们不多会关心,我总结出的bean的生命周期大体能够分为如下几个步骤: post
① Spring IoC容器找到关于Bean的定义并实例化该Bean。 ② Spring IoC容器对Bean进行依赖注入。 ③ 若是Bean实现了BeanNameAware接口,则将该Bean的id传给setBeanName方法。 ④ 若是Bean实现了BeanFactoryAware接口,则将BeanFactory对象传给setBeanFactory方法。 ⑤ 若是Bean实现了BeanPostProcessor接口,则调用其postProcessBeforeInitialization方法。 ⑥ 若是Bean实现了InitializingBean接口,则调用其afterPropertySet方法。 ⑦ 若是有和Bean关联的BeanPostProcessors对象,则这些对象的postProcessAfterInitialization方法被调用。 ⑧ 当一个bean再也不被调用时将从bean容器中移除。 ⑨ 当销毁Bean实例时,若是Bean实现了DisposableBean接口,则调用其destroy方法。
若是你以为以上还有有些复杂,那么你能够大概这样理解:spa
最后补充一些内容,看不明白能够不看:code
Spring bean factory 负责管理在 spring 容器中被建立的 bean 的生命周期。Bean 的生命周期由两组回调(call back)方法组成。 - 初始化以后调用的回调方法。 - 销毁以前调用的回调方法。 Spring 框架提供了如下四种方式来管理 bean 的生命周期事件: - InitializingBean 和 DisposableBean 回调接口 - 针对特殊行为的其余 Aware 接口 - Bean 配置文件中的 Custom init() 方法和 destroy() 方法 - @PostConstruct 和 @PreDestroy 注解方式