在应用程序中维护全局状态时,有两个主要问题 -
- 共享全局常量
- 共享全局动态
因为(1)
我PropertyPlaceholderConfigurer
用来将全局常量注入到 bean 中。
为了共享全局动态状态,我创建了一个带有公共静态成员的中心类。例如
public class GlobalState {
public static MyObject myObj;
}
我无法注入myObj
,因为它的状态需要在运行时计算,然后在应用程序的所有模块之间共享。
我对上述方法中的紧密耦合感到不舒服。静态使重构代码变得困难。稍后,如果我想Aspect
对所有读取调用应用一个,GlobalState
那是不可能的。
使用 Spring 管理全局动态状态的最佳方法是什么?
这是我脑海中的两个假设(不知道Spring是否促进这些)解决方案-
- 在运行时动态放置
myObj
到 spring 上下文中。然后要求 Spring 将新实例重新注入到所有声明依赖项的 bean 中(在初始化上下文时最初可以注入 null)。 - 有一个像
ValueStack
Spring 一样的 Struts,我可以在上面放置我的原始值,其他类可以使用上下文引用从那里加载它。