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。 - 只要你的
@ServiceBean是当前Bean的依赖(通过@Autowired等方式注入),在当前Bean的@PreDestroy方法调用时,这个@ServiceBean肯定还处于可用状态,完全可以用来执行数据库操作。
注意事项
- 避免在
@PreDestroy中执行耗时过长的操作:容器销毁过程有超时限制,长时间操作可能导致容器无法正常关闭。 - 如果涉及多线程操作,要确保线程安全:容器销毁时可能有多个Bean同时执行
@PreDestroy,如果你的数据库操作涉及共享资源,需要做好同步处理。
内容的提问来源于stack exchange,提问作者Programmer2030
相关产品推荐
相关产品推荐

