扫码关注微信公众号

回复“面试手册”,获取本站PDF版

回复“简历”,获取高质量简历模板

回复“加群”,加入程序员交流群

回复“电子书”,获取程序员类电子书

当前位置: Java > Spring高频面试题 > 19.解释Spring框架中bean的生命周期

Beand的生命周期比较长,并且不是很容易记住,如下图

bean的生命周期

具体步骤如下:

  1. 首先通过getBean()方法向容器请求一个Bean
  2. 如果容器注册了InstantiationAwareBeanPostProcessor接口,则在实例化Bean前调用接口的postProcessBeforeInstantiation()方法
  3. 根据配置情况调用Bean构造函数或工厂方法实例化Bean
  4. 如果容器注册了InstantiationAwareBeanPostProcessor接口,在实例化Bean之后,调用接口的postProcessAfterInstantiation()方法
  5. 如果Bean配置了属性信息,容器会将配置值设置到Bean对应的属性中,不过在设置每个属性前将先调用InstantiationAwareBeanPostProcessor接口的postProcessPropertyValues()方法
  6. 调用Bean的属性设置方法设置属性值
  7. 如果Bean实现了BeanNameAware接口,则将调用setBeanName()方法,将配置文件中的该Bean对应的名称设置到Bean中
  8. 如果Bean实现了BeanFactoryAware接口,则将调用setBeanFactory()方法,将BeanFactory容器实例设置到Bean中
  9. 如果BeanFactory装配了BeanPostProcessor后处理器,则将调用BeanPostProcessor的postProcessBeforeInstantiation(Object bean, String beanName)方法对Bean进行加工操作。其中,参数Object bean是指当前正在处理的Bean,而beanName是当前Bean的配置名,返回对象为加工处理后的Bean
  10. 如果Bean实现了InitializingBean接口,则将调用接口的afterPropertiesSet()方法
  11. 如果在Bean中通过init-method属性定义了初始方法,则将执行这个方法
  12. BeanPostProcessor后处理器定义了两个方法,其中一个在第8步中调用过了,这里调用postProcessAfterinitialization(Object bean, String beanName)方法再次对Bean进行加工处理
  13. 如果没有指定Bean的范围,则Bean的默认范围为单例,将Bean放入Spring IoC容器的缓存池中,并将Bean返回给调用者
  14. 如果Bean实现了DisposableBean接口,则将调用接口的destory()方法
  15. 如果通过<bean>的destory-method属性指定了Bean的销毁方法,那么将执行这个方法完成对Bean资源的释放

点击面试手册,获取本站面试手册PDF完整版