Spring Rest 应用程序中的 Java 静态/全局变量

问题描述 投票:0回答:2

我正在开发一个 Spring Rest 服务 Web 应用程序,一旦控制器中收到 HTTP 请求,我就会设置一个

static String
变量
null
。此外,在应用中,该变量会被各种类和方法多次修改,最终作为 REST 服务响应返回。

我担心这个

static String
变量可能会被另一个并发 HTTP 请求更新,从而导致先前请求中的值不正确。

我不想使用实例变量,因为这需要在应用程序中传递给多个方法(> 30)。

请建议一种方法来声明一个全局变量,该变量不会被任何并发 HTTP 请求更新,并且为每个 HTTP 请求都有一个单独的副本。

java spring rest static global-variables
2个回答
1
投票

您所有的验证方法都已经带有参数,对吗?数据有待验证。

它们还需要能够生成验证消息并将其存储在某个地方,例如在“结果收集器”中,对吗?所以这也应该是一个参数。

旁注:将数据和结果收集器作为参数提供给验证器可以让您对验证器进行单元测试。

我没有看到将结果收集器传递给所有验证器的问题,就像传递要验证的数据一样。这就是代码应该如何编写的。

切勿在 Web 应用程序中使用“全局”内存。

纯粹从验证器的角度来看,您传入要验证的数据,但期望将结果写入静态收集器?

糟糕的设计,就在那里。验证器不应该负责弄清楚如何找到结果收集器。


0
投票
控制器具有单例作用域,它不应该包含数据。如果您需要将数据存储到应用程序,请使用包含数据字符串的 bean 的相应范围。

如果您使用的是在其他用户之间共享的 bean,那么应该保护数据免受并发修改。目前以哪种方式为用户提供保护并不重要,但负担得起的数据结构简化了此类 bean 的实现。

© www.soinside.com 2019 - 2024. All rights reserved.