显然我想编写解耦组件。一部分是表单引擎。我不希望它依赖于servlet API,但我必须按请求(或至少每个会话)初始化它。如何在Servlet环境中初始化一个API
在一个应用程序,我会使用类似
public static void setLocale(Locale l);
那么我个人类可以用静态的getter得到它。这在servlet环境中是不可行的(servlet甚至缺乏可模拟静态行为的方法)。
我绝对不想使用工厂(我将有10多个类,所有这些类都将使用一些配置,至少是Locale)或者比这更糟糕:使用参数块构建每个对象(其中包含Locale
和其他设置)。
我想知道在这种情况下什么是最好的。静态行为是否可以用一种可用的方式进行模拟,或者servlet API是否可以解决这个问题?
如果所有其他可能性失败我想用类似的:
class MyParameters {
private Map<Thread, MyParameters> threadParameters = new Map<Thread, MyParameters>();
public static void setParameters(MyParameters parameters) {
threadParameters.put(Thread.getCurrentThread(), parameters);
}
public static MyParameters getParameters() {
return threadParameters.get(Thread.getCurrentThread());
}
}
...但会带来一些安全问题(一个servlet可能无法初始化和前一个请求期间使用设置的值由同一个线程服务)。 - 虽然使用不同的用户的区域设置并不是太大的威胁。
谢谢!当然,我的'MyParameters'示例可以通过一个请求来工作,我并没有假设一个线程会通过一个会话保持不变。 – vbence 2011-04-22 13:41:10
不,线程是基于请求的,而不是基于会话的。 – BalusC 2011-04-22 13:42:05
我写的是:“我没有假设一个线程会通过一个会话持续不断” – vbence 2011-04-22 14:43:51