我编写了一个 Web 服务应用程序,它在主类中为每个请求生成随机值(用于日志记录)。
我无法将其设置为静态字段,因为下一个请求将覆盖它。
我也无法将它传递给我在主类中使用的每个类(作为参数或使用 setter)。
是否可以创建一些半静态字段 - 对一个请求可见,但对访问 Web 服务的所有其他请求不可见?
最佳答案
您可以放心地假设,在 Java EE 模型中,每个请求都由单个线程提供服务,并且并发请求不会发生争用。
话虽如此,您可以使用 ThreadLocal 来使用 Singleton,让 Servlet 填充值并让底层类访问 sigleton,而无需考虑线程或 HTTP 请求上下文:
public class RandomValueHolder {
private static ThreadLocal<Long> randomValue;
public static Long getRandomValue() {
return randomValue.get();
}
public static void setRandomValue(Long value) {
randomValue = new ThreadLocal<Long>();
randomValue.set(value);
}
}
关于java - Java应用中的半静态字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9189304/