当前,作为doGet / doPost任务的一部分,我正在使用Google的Gson类将传入的Ajax JSON字符串解析为Java pojos。我以通常的方式从JSON字符串中实例化一个新的Gson对象:
JsonObj jsonObj = new Gson().fromJson(jsonStr, jsonObj.class);
值得怀疑的是,是否应该在servlet初始化中实例化共享的gson对象,以避免在每个servlet doGet / doPost调用中执行new Gson()
。
在Instantiate a new instance of GSON for every serialization?中,我了解到Gson不是单例,并且可以使用GsonBuilder进行一些自定义,但这不是我的情况。 我担心共享Gson对象的多线程行为。
答案 0 :(得分:1)
简单答案:Best students
?
?
?
是线程安全的,您可以在servlet之间共享它。参见:Is it OK to use Gson instance as a static field in a model bean (reuse)?
但是您应该将Gson
序列化/反序列化逻辑与业务逻辑分离。例如,在Spring中由*HttpMessageConverter层完成。因此,第一步将是创建JSON
对象的共享bean,第二步将是创建抽象层,该层允许在需要时交换实现。无论如何,如果您正在写Gson
,web-app
是一个不错的选择。