开发者学堂课程【高校精品课-厦门大学 -JavaEE 平台技术:对象生命周期】学习笔记,与课程紧密联系,让用户快速学习知识
课程地址:https://developer.aliyun.com/learning/course/80/detail/15900
对象生命周期
内容介绍:
一、spring 容器接口分类
二、安装顺序
一、spring 容器接口分类
Bean 的容器负责从对象的创建到销毁的全主动周期,如果需要知道对象的创建过程是这样的,spring 容器提供了一系列接口,可以在整个对象的生命周期不同的阶
段做一些处理。
这些接口会分成两类,一类是 Bean 级生命周期接口,一类是容器级生命周期接口。Bean 级接口只会影响特定的 Bean 的生命周期,就是在特定的 Bean 的生命周期里起作用,而容器级的接口只是在这个容器中间所有的 Bean 都会起作用
1、Bean 级生命周期接口
在 spring 容器中,Bean 级生命周期接口一共有五个,
第一个是 BeanNameAware,用于获得Bean 对象的名称;
第二个是 BeanFactoryAware,用来得到 BeanFactory 容器对象;第三个
ApplicationContextAware,用来得到 ApplicationContext 容器对象;
第四个是 InitializingBean;
最后一个是
DisposableBean,InitializingBean 和 DisposableBean 是分别在 Bean 对象的创建的时候的接口和被废弃的时候的接口。
这五个 Bean 级的生命周期接口只是针对特定的 Bean 对象才会起作用,不会对所
有的 Bean 对象起作用。
如果某个 Bean 对象需要使用这些接口,Bean 对象就可以实现 Initializing 这些接口,就自然会有这些接口中间的方法,这些接口中间的方法就会在生命周期不同的
阶段被调用,做一些这个阶段要做的事情。
2、容器级生命周期接口
容器级生命周期接口主要是两个,
一个是InstantiationAwareBeanPostPorcessorAdaptor,另一个 BeanPostProcessor,容器级接口是对在容器中间所有的 Bean 对象都会起作用。
二、安装顺序
1、在生命周期中间这两类接口是安装什么样的顺序调用的?
当实例化一个对象的时候,首先被调用的是容器级
的 InstantiationAwareBeanPostProces
接口中间的 postProcessBeforeInstation,这个接口被调用以后会调用 Bean 对象
自身的构造函数,Bean 对象自身的构造函数调用完以后会调另外一个容器级的接口
InstantiationAwareBeanPostAdapter
的 postProcessPropertyValuse,这个接口完成以后,会对 Bean 对象的属性进行赋值,Bean 对象的属性往往来自于在配中间告诉它的关联,或者是某些配置文件的信息需要放到 Bean 的属性中去。当 Bean 的属性赋值被完成以后会调用 Bean 级的接口 BeanNameAware 的 SaidBeanName,告诉这个对象的名称是什么,然后是 BeanFactoryAware SaidBeanFactory 方法,可以拿到 BeanFactory 对象;然后是 ApplicationContextAware 的 SaidApplicationContext 接口,这样可以拿到ApplicationContext 的对象。这三个 Aware 接口完成以后,调用的是另外一个 Bean 级接口 BeanPostProcessor. postProcessBeforeInitialization 的接口,完成以后是另外一个 Bean 级接口 InitializingBean.
afterPropertiesSet,这些方法都调完以后会调用在 art Bean 注解中指定的
initMethod 方法,
然后是容器级的接口
BeanPostProcessor. postProcessAfterInitialization,然后是
InstantiationAwareBeanPostProcessorAdapter.postProcess
AfterInstantiation 的接口,两个容器接口被调完以后 Bean 对象就创建成功了,就
可以正常使用 Bean 对象。
2、当这个容器被终止的时候,容器中间的 Bean 对象也会被销毁,被销毁后调的是 DisposableBean.able 方法,然后是 art Bean 注解中描述的 detroyMethod 的属性
定义的方法,最终把 Bean 对象销毁。