39.Bean的销毁过程

Spring容器在创建时注册了销毁逻辑(单例Bean)
//注册源码
//org.springframework.beans.factory.support.AbstractBeanFactory#registerDisposableBeanIfNecessary
    
//实现注册:注解,实现接口,通过bdf指定销毁方法
@jakarta.annotation.PreDestroy
@Component
public class UserService implements DisposableBean {}  

//初始化和销毁的方法都在这里存储
org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor#buildLifecycleMetadata
    
//把实现的注册包装成 DisposableBeanAdapter,存入map  
org.springframework.beans.factory.support.DisposableBeanAdapter
Spring容器关闭的时候触发
//进程正常结束的时候
context.registerShutdownHook();
context.close();
Spring容器关闭过程
publishEvent
lifecycleProcessor.onClose()
//只销毁单例bean    
destroyBeans
applicationListeners.clear()    
适配器模式的使用场景

在销毁时,Spring会找出实现了DisposableBean接口的Bean。

但是我们在定义一个Bean时,如果这个Bean实现了DisposableBean接口,或者实现了 AutoCloseable接口,或者在BeanDefinition中指定了destroyMethodName,那么这个Bean都属 于“DisposableBean”,这些Bean在容器关闭时都要调用相应的销毁方法。

所以,这里就需要进行适配,将实现了DisposableBean接口、或者AutoCloseable接口等适配成实 现了DisposableBean接口,所以就用到了DisposableBeanAdapter。 会把实现了AutoCloseable接口的类封装成DisposableBeanAdapter,而DisposableBeanAdapter 实现了DisposableBean接口。

Spring中依赖注入的方式

set方法注入

构造方法注入

@Autowired注解

  • 属性上:先根据属性类型去找Bean,如果找到多个再根据属性名确定一个
  • 构造方法上:先根据方法参数类型去找Bean,如果找到多个再根据参数名确定一个
  • set方法上:先根据方法参数类型去找Bean,如果找到多个再根据参数名确定一个
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值