You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring @PreDestroy方法调用时其他Bean上下文可用性及调用可行性问询

关于Spring @PreDestroy方法中依赖可用性的问题

核心结论

你的理解是正确的:当Spring容器销毁Bean时,会先调用目标Bean的@PreDestroy方法,之后才会销毁该Bean的依赖(以及容器内其他关联Bean)。所以在@PreDestroy方法中调用自动注入的其他Bean(比如你的@Service层Bean)是安全的,不会触发因依赖已销毁导致的异常。

具体细节

  • Spring容器的销毁顺序遵循反向创建顺序:创建时先初始化依赖Bean,再初始化依赖它的Bean;销毁时则先执行目标Bean的@PreDestroy方法,再销毁目标Bean,最后才会处理它的依赖Bean的销毁流程。也就是说,若Bean A依赖Bean B,销毁顺序是:A的@PreDestroy执行 → 销毁A → B的@PreDestroy执行 → 销毁B。
  • 只要你的@Service Bean是当前Bean的依赖(通过@Autowired等方式注入),在当前Bean的@PreDestroy方法调用时,这个@Service Bean肯定还处于可用状态,完全可以用来执行数据库操作。

注意事项

  • 避免在@PreDestroy中执行耗时过长的操作:容器销毁过程有超时限制,长时间操作可能导致容器无法正常关闭。
  • 如果涉及多线程操作,要确保线程安全:容器销毁时可能有多个Bean同时执行@PreDestroy,如果你的数据库操作涉及共享资源,需要做好同步处理。

内容的提问来源于stack exchange,提问作者Programmer2030

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 06:30:44