spring bean的生命周期
谈到spring的bean对象应该都不陌生,而且基本每次面试都会问到,这东西深的可以讲半小时。我看视频了解了一些,现在仅此记之。
首先来看张图:
实例化对象
当实例化bean对象的时候会涉及两个类: BeanFactory和ApplicationContext
- BeanFactory是客户端请求的时候,需要用的对象没有初始化,调用createbean方法来创建该对象。
- ApplicationContext是在容器启动的时候,会生成一个beaninifatial的对象,由这个对象进行全部实例化。
说白了就是,ApplicationContext是在刚开始的时候全部都实例化了,BeanFactory是在你需要使用的时候进行实例化
设置对象属性
通过反射来设置对象属性;
检测aware相关接口,设置相关依赖
接下来是aware相关检测,比如:BeanNameFactoryAware 设置bean 的id,BeanFactoryAware ,ApplicationContextAware 。
走完这三步,bean对象基本正确构建
自定义bean处理
然后检测有没有实现BeanPostProcessor,如果实现,需要重写前置方法(postProcessBeforeInitailization(Object bean对象,String bean名称) )和后置方法(postProcessAfterInitailization(Object bean对象,String bean名称) ),前置方法执行完后,检测是否实现InitializingBean接口,若实现了,就调用afterPointSet方法,然后就是调用自定义的初始化方法init-method,最后执行后置方法。
使用和销毁
然后就是使用bean对象,使用完后查看是否实现DisposableBean,实现就调用destroy方法销毁,当然你也可以自定义销毁的方法。