Spring中Bean的生命周期

Spring的生命周期

​ 在spring学习笔记中有生命周期,这里单独拿出来详细讲一讲

1 笔记中的内容

在这里插入图片描述

根据上图,Bean的生命周期执行过程如下:

  1. 根据配置情况调用Bean的构造方法或工厂方法实例化Bean
  2. 利用依赖注入完成Bean中所有属性值的配置注入
  3. 如果Bean实现了BeanNameAware接口,则Spring调用setBeanName()方法传入当前Bean的id值
  4. 如果Bean实现了BeanFactoryAware接口,则Spring调用setBeanFactory()方法传入当前工厂实例的引用
  5. 如果Bean实现了ApplicationContextAware接口,则Spring调用setApplicationContext()方法传入当前ApplicationContext实例的引用。
  6. 如果BeanPostProcessor和Bean关联,则Spring将调用该接口的与初始化方法postProcessBeforelnitialzation()对Bean进行加工操作,这个非常重要,Spring的AOP就是用它实现的
  7. 如果Bean实现了InitializingBean接口,则Spring将调用afterPropertiesSet()方法
  8. 如果在配置文件中通过 init-method 属性指定了初始化方法,则调用该初始化方法。
  9. 如果有 BeanPostProcessor 和 Bean 关联,则Spring将调用该接口的初始化方法postProcessAfterlnitialization()。此时,Bean已经可以被应用系统使用了。
  10. 如果在中指定了该Bean的作用范围为scope=“singleton”,则将该Bean放入Spring IoC的缓存池中,将触发Spring对该Bean的生命周期管理;如果在中指定了该Bean的作用范围为scope=“prototype”,则将该Bean交给调用者,调用者管理该Bean的生命周期,Spring不在管理该Bean。
  11. 如果Bean实现了DisposableBean接口,则Spring会调用destory()方法将Spring中的Bean销毁;如果在配置文件中通过destory-method属性制定了Bean的销毁方法,则Spring将调用该方法进行销毁。

2 概述

​ 上面的步骤谁记得住?疯了,首先我们将bean的生命周期分成:

  • Bean创建
  • Bean销毁

两个,这样没有问题吧,然后再看创建都干了啥?

2.1 Bean创建

​ 之前的beandefinition和BeanFactorypostprocessor略过不讲,实例化之前已经将配置文件中的bean放到BeanFactory容器当中了,创建分为如下步骤:

  • Bean实例化:创建一个Bean对象,创建完后属性值是空的,需要初始化
  • Bean初始化:进行一系列填充和之后的处理

Bean的初始化可以分为:

  • 填充属性
  • 执行一系列Aware接口方法
  • BeanPostProcessor(后置处理器)
    • before:返回bean实例可能是原始包装器,如applicationContext
    • init-method:执行初始化方法
    • after:再执行after返回

至此Bean对象就是一个完整的对象了,可以直接拿过来使用。

2.2 Bean销毁

  • 调用DisposableBean的destroy方法
  • 调用自定义的销毁方法

3 参考博客

面试刷题:Spring Bean的生命周期?

  1. 从xml或注解配置中读取bean定义,进行实例化

  2. 首先设置自定义bean的属性

  3. 如果bean实体类中实现了一系列Aware接口,则设置这些的属性

    注:假设有如下User实体类

    private Integer id;
    private String name;
    private BeanFactoryAware beanFactoryAware;
    private BeanApplicationContextAware beanApplicationContextAware;
    

    Aware接口:Spring提供了广泛的Aware回调接口,让bean向容器表明它们需要某种基础设施依赖

  4. 执行通用的方法前置处理:BeanPostProcessor.postProcessorBeforeInitialization();对Bean进行加工处理

  5. 执行 InitalizingBean.afterPropertiesSet() 方法

  6. 执行Bean自定义的初始化方法init,或者 @PostConstruct 标注的方法;

  7. 执行方法BeanPostProcessor.postProcessorAfterInitialization(),创建对象完毕

  8. 执行 DisposableBean.destory() 方法;

  9. 执行自定义的destory方法或者 @PreDestory 标注的方法;

  10. 销毁对象完毕

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值