Bean的生命周期相关

前言:

前面一篇博客初步介绍了@Configuration + @Bean 的用法,这里简单总结下Spring容器中 bean 的生命周期(毕竟以前是自己各种 new 对象,现在大多交由容器帮我们管理)。

正文:

1、bean 的生命周期主要分为三个阶段:创建、初始化和销毁

  • 创建:
    单实例:在容器启动的时候就会创建bean;这也是后文提到 @Lazy 注解帮忙解决的问题
    多实例:在getBean()的时候才会创建bean。
  • 初始化:对象创建完成,并赋值好,调用初始化方法。
  • 销毁:
    单实例:在容器关闭的时候,会销毁对象;
    多实例:容器不会管理这个bean,自然也就不会帮忙销毁。

2、容器管理bean的生命周期的几种方式:

  • 方式一:
    自定义初始化和销毁方法:容器在bean进行到生命周期的某一阶段时候,会调用自定义的初始化和销毁方法。
    通过 @Bean(initMethod="init", destroyMethod="destory") 的形式

  • 方式二:
    自定义的bean去实现 InitializingBean, DisposableBean这两个接口,重写其中的方法,也可以自定义初始化和销毁逻辑

  • 方式三:
    使用JSR250规范中定义的两个注解(javax包中的)标注再自定义bean的特定方法上。

    @PostConstruct: 在bean创建完成并且属性赋值完之后,会执行初始化方法;
    @PreDestory: 在容器销毁bean之前,进行一定的清理工作。
    
  • 方式四:
    自定义 BeanPostProcessor(bean后置处理器)(继承相应的父类或者实现相应的接口),就可以在bean初始化前/后进行一定的处理工作。
    BeanPostProcessor 接口中的两个方法如下:

    postProcessBeforeInitialization: 在初始化前进行工作
    postProcessAfterInitialization: 在初始化后进行工作
    

    这里指的初始化前后,在下面的源码注释中已经写的非常清楚了,刚好对应前面的三种方式。
    在这里插入图片描述在这里插入图片描述
    在上面这两个方法前打上断点,通过debug源码发现,其实是先遍历得到所有的 BeanPostProcessor,逐一执行每个后置处理器的 postProcessBeforeInitialization() 或者 postProcessAfterInitialization() 方法。一旦有一个执行结果为 null,直接返回结果,不会执行后续方法。

    说明:Spring底层对 BeanPostProcessor使用得也是非常多:例如后面还会再次提到的 XxxAware 与 XxxAwareProcessor,以及从图中也可以看到的 ApplicationContextAwareProcessor 或者 AutowiredAnnotationBeanPostProcessor 等等。

    ApplicationContextAwareProcessor:某个bean实现了 ApplicationContextAware 接口之后,就可以在该 bean 中获取到 ApplicationContext 对象。
    AutowiredAnnotationBeanPostProcessor:跟 @Autowired注解有关等等。
    

    BeanPostProcessor 的继承树如下所示:
    在这里插入图片描述

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值