3

在应用程序中维护全局状态时,有两个主要问题 -

  1. 共享全局常量
  2. 共享全局动态

因为(1)PropertyPlaceholderConfigurer用来将全局常量注入到 bean 中。

为了共享全局动态状态,我创建了一个带有公共静态成员的中心类。例如

public class GlobalState {
    public static MyObject myObj;
}

我无法注入myObj,因为它的状态需要在运行时计算,然后在应用程序的所有模块之间共享。

我对上述方法中的紧密耦合感到不舒服。静态使重构代码变得困难。稍后,如果我想Aspect对所有读取调用应用一个,GlobalState那是不可能的。

使用 Spring 管理全局动态状态的最佳方法是什么?

这是我脑海中的两个假设(不知道Spring是否促进这些)解决方案-

  1. 在运行时动态放置myObj到 spring 上下文中。然后要求 Spring 将新实例重新注入到所有声明依赖项的 bean 中(在初始化上下文时最初可以注入 null)。
  2. 有一个像ValueStackSpring 一样的 Struts,我可以在上面放置我的原始值,其他类可以使用上下文引用从那里加载它。
4

1 回答 1

0

为什么不GlobalState通过实例方法注入并提供计算数据?

另外,我不明白为什么您不能注入运行时计算的结果(myObj)?例如,您可以实现InitializingBean在应用程序的所有相关部分启动后触发计算(只需注入您计算所需的内容,Spring 负责实例化顺序)。

更新

其他可能性是将 bean 定义为静态工厂方法的结果,或者创建一个BeanDefinitionRegistryPostProcessor来执行您的计算并将计算结果添加到应用程序上下文中。

于 2013-04-17T06:08:32.793 回答