【问题标题】:How to prevent a singleton bean from being destroyed by the ApplicationContext refresh如何防止单例bean被ApplicationContext刷新破坏
【发布时间】:2011-06-14 17:55:56
【问题描述】:

我有一个在刷新 ApplicationContext 时被销毁的单例 bean。这个 bean 是会话注册表,它跟踪会话(duh)。在我的应用程序初始配置后,我使用来自 ApplicationContext 的刷新来获取新配置。但是,由于会话本身尚未结束,因此不应销毁 SessionRegistry。因此,我需要将 SessionRegistry 排除在 ApplicationContext 刷新造成的肆意破坏之外。有没有一种相当简单的方法可以做到这一点,或者我必须实现我自己的 ApplicationContext 版本,并重新编码它的方法?

编辑:所以我最终做的是覆盖 sessionregistry 以创建一个真正的单例,从会话注册表中获取所有会话,从 applicationcontext 中删除 sessionregistry 作为侦听器,然后在 sessionregistry 之后重新添加会话已重新创建。

【问题讨论】:

  • 为什么以及何时刷新您的上下文?
  • 在(重新)配置后会刷新。

标签: java spring singleton refresh


【解决方案1】:

我猜你可以使用@PreDestroy 方法将当前状态转移到static 字段,并在@PostConstruct 上读取该字段以恢复bean 数据。

请注意,spring bean 在上下文中是单例的。如果上下文消失,bean 就会消失。如果存在多个上下文,一个 bean 可以有多个实例。因此使用static,这是“更多的单例”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-05
    相关资源
    最近更新 更多