一、前言
二、Bean的生命周期
(一)前提条件
Bean的作用域中有singleton和prototype,本文是以singleton为例来总结的。
(二)生命周期图
(三)详细解释
1)Spring对Bean进行实例化(相当于程序中的new Xx())
2)Spring将值和Bean的引用注入进Bean对应的属性中
3)如果Bean实现了BeanNameAware接口,Spring将Bean的ID传递给setBeanName()方法
(实现BeanNameAware主要是为了通过Bean的引用来获得Bean的ID,一般业务中是很少有用到Bean的ID的)
4)如果Bean实现了BeanFactoryAware接口,Spring将调用setBeanFactory方法并把BeanFactory容器实例作为参数传入。
(实现BeanFactoryAware 主要目的是为了获取Spring容器,如Bean通过Spring容器发布事件等)
5)如果Bean实现了ApplicationContextAwaer接口,Spring容器将调用setApplicationContext(ApplicationContext ctx)方法,把应用上下文作为参数传入.
6)如果Bean实现了BeanPostProcess接口,Spring将调用它们的postProcessBeforeInitialization(预初始化)方法
(作用是在Bean实例创建成功后对进行增强处理,如对Bean进行修改,增加某个功能)
7)如果Bean实现了InitializingBean接口,Spring将调用它们的afterPropertiesSet方法,作用与在配置文件中对Bean使用init-method声明初始化的作用一样,都是在Bean的全部属性设置成功后执行的初始化方法
8)如果Bean实现了BeanPostProcess接口,Spring将调用它们的postProcessAfterInitialization(后初始化)方法
(作用与6的一样,只不过6是在Bean初始化前执行的,而这个是在Bean初始化后执行的,时机不同 )
9)经过以上的工作后,Bean将一直驻留在应用上下文中给应用使用,直到应用上下文被销毁
10)如果Bean实现了DispostbleBean接口,Spring将调用它的destory方法
11)调用自定义的销毁方法
Java新手,若有错误,欢迎总结!