gpt4 book ai didi

java - Spring 共享全局状态的方式?

转载 作者:行者123 更新时间:2023-12-02 06:19:09 25 4
gpt4 key购买 nike

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

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

对于(1),我使用PropertyPlaceholderConfigurer将全局常量注入(inject)到bean中。

为了共享全局动态状态,我创建了一个包含公共(public)静态成员的中心类。例如

public class GlobalState {
public static MyObject myObj;
}

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

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

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

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

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

最佳答案

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

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

更新

其他可能性是define beans being the result of a static factory method ,或创建 BeanDefinitionRegistryPostProcessor它会进行计算并将计算结果添加到应用程序上下文中。

关于java - Spring 共享全局状态的方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16052270/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com