在应用程序中维护全局状态时,有两个主要问题 -
对于(1)
,我使用PropertyPlaceholderConfigurer
将全局常量注入到bean中。
为了共享全局动态,我创建了一个带有公共静态成员的中心类。 e.g。
public class GlobalState {
public static MyObject myObj;
}
我无法注入myObj
,因为它的状态需要在运行时计算,然后在应用程序的所有模块之间共享。
我对上述方法中的紧耦合感到不舒服。静态使得重构代码变得困难。如果我想对Aspect
的所有读取呼叫应用GlobalState
,那么以后就不可能了。
使用Spring管理全局动态的最佳方法是什么?
以下是两个假设的(不知道Spring是否有助于这些)解决方案 -
myObj
置于spring上下文中。和
然后要求Spring将新实例重新注入所有bean
声明一个依赖项(null可以在最初注入时
上下文已初始化。)ValueStack
这样的Struts,我可以放置它
原始值和其他类可以从那里加载它
上下文参考。答案 0 :(得分:0)
为什么不注入GlobalState
并通过实例方法提供计算数据?
另外,我不明白为什么你不能注入运行时计算的结果(myObj
)?你可以,例如实现InitializingBean
以在应用程序的所有相关部分开始后触发计算(只需注入计算所需的内容,Spring负责实例化顺序)。
其他可能性是define beans being the result of a static factory method,或创建一个BeanDefinitionRegistryPostProcessor进行计算并将计算结果添加到应用程序上下文中。