我是否应该为所有对Servlet的doGet / doPost调用实例化共享的Gson对象?

时间:2019-05-30 10:06:30

标签: java servlets gson

当前,作为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对象的多线程行为。

1 个答案:

答案 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,第二步将是创建抽象层,该层允许在需要时交换实现。无论如何,如果您正在写Gsonweb-app是一个不错的选择。