java - Spring 如何通知实例何时被销毁?

标签 java spring

我正在阅读 Pro Spring 2.5 这本书,在第 4 章中他们讨论了生命周期回调。 Spring 如何在实例被销毁时发出通知(据我所知,它仅适用于单例)?使用什么机制?

最佳答案

这里没有魔法,当 BeanFactory/ApplicationContext 被销毁(调用 close() 方法)时,会调用销毁回调。在桌面应用程序中,这必须手动完成,在 servlet 环境中,用于启动应用程序上下文(通常为 ContextLoaderListener )的相同机制会为您处理销毁。

两个注意事项:

  • 销毁对于需要显式清理的对象(例如数据库连接池 (DataSource) 或线程)非常重要。

  • Bean 的销毁顺序与创建顺序相反。这是可以理解的:当bean A 依赖于 B 时,必须首先创建 B。当bean A 被销毁时,B 必须随后被销毁,否则 A 在销毁阶段将无法访问其依赖项。

Spring还允许自动注册shutdown hook自动处理关机。我不建议这样做,但仅供记录:

ConfigurableApplicationContext ctx = new ClassPathXmlApplicationContext(...)
ctx.registerShutdownHook();

关于java - Spring 如何通知实例何时被销毁?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9752371/

相关文章:

java - 在 Java 中的方法之间使用相同的对象实例

java - Hazelcast CP 子系统 FencedLock 内存使用情况

java - 如何从 weka API 计算置信度?

java - springboot读取tomcat-context.xml

java - 如何解决 "The certificate is not valid and cannot be used to verify the identity of this website"错误?

java - 三角形递归

java - 无法从 start.spring.io 启动 Spring Boot 2x 应用程序

java - 如何在 Spring MVC 中定义请求映射的优先级?

java - 将数字表示转换为人类可读的字符串

java - Spring + SessionScope + CompletableFuture = 错误