如何防止单例bean被ApplicationContext刷新破坏

时间:2011-06-14 17:55:57

标签: java spring singleton refresh

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

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

1 个答案:

答案 0 :(得分:1)

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

请注意,spring bean在上下文中是单例。如果上下文死亡,那么bean就会死掉。如果存在多个上下文,则bean可以具有多个实例。因此使用static是“更单身”。