【发布时间】:2013-04-09 18:09:45
【问题描述】:
在应用程序中维护全局状态时,有两个主要问题 -
- 共享全局常量
- 共享全局动态
对于(1),我使用PropertyPlaceholderConfigurer 将全局常量注入到bean 中。
为了共享全局动态状态,我创建了一个包含公共静态成员的中心类。例如
public class GlobalState {
public static MyObject myObj;
}
我无法注入 myObj,因为它的状态需要在运行时计算,然后在应用程序的所有模块之间共享。
我对上述方法中的紧密耦合感到不舒服。静态使得代码难以重构。稍后,如果我想在所有对GlobalState 的读取调用上应用Aspect,这是不可能的。
使用 Spring 管理全局动态状态的最佳方法是什么?
这是我脑海中的两个假设的(不知道 Spring 是否促进这些)解决方案 -
- 在运行时动态地将
myObj放入spring 上下文中。和 然后要求 Spring 将新实例重新注入所有 bean 声明一个依赖项(null 可以在最初注入 上下文已初始化)。 - 在 Spring 中有一个类似
ValueStack的 Struts,我可以在上面放置我的 原始值和其他类可以使用从那里加载它 上下文参考。
【问题讨论】:
-
当你说state需要在运行时计算,是指在应用程序的生命周期中计算一次还是多次?
标签: java spring dependency-injection global-variables