使用Singleton类中的静态GSON对象将Java对象序列化为JSON

时间:2017-03-31 04:24:43

标签: java serialization static singleton gson

我对Singleton类行为有疑问。

情景
我们有合作伙伴使用的Web服务,请求在1秒内频繁发生2-3次。因此,它们是大量使用的服务。我们希望以JSON格式存储请求和响应。

截至目前,在每个webservice接口类中,我们已经启动了Gson对象并将java对象序列化为json。

问题
我只是在想,如果我在Singleton类中将Gson对象作为静态对象启动一次,然后将其引用给Json的所有请求/响应序列化java对象,它会导致任何问题吗?

我的意思是,由于有多个Web服务,其中几个被合作伙伴大量使用,因此在所有Web服务中访问的单个GSON实例会导致任何延迟或任何其他问题吗?如果是,除了记忆之外,它还有哪些其他好处和问题?

2 个答案:

答案 0 :(得分:0)

来自Gson的javadoc:

  

这是使用Gson的主要类。通常首先使用Gson实例,然后在其上调用toJson(Object)fromJson(String, Class)方法来使用Gson。 Gson实例是线程安全的,因此您可以在多个线程中自由地重用它们。

因此,您的服务中只有一个Gson实例,并且可以为每个请求/响应重复使用它。作为示例,您可以考虑创建一个util类,类似于以下类:

public abstract class GsonUtils {
    private static Gson gson = new Gson();

    static {
        // your extra init logic goes here
    }

    public static <T> T fromJson(String json, Class<T> classOfT) {
        return gson.fromJson(json, classOfT);
    }


    public static String toJson(Object object) {
        if (object == null) {
            return "";
        }
        return gson.toJson(object);
    }
}

或者你可以这样做: - )

答案 1 :(得分:0)

最近我处理的是同样的想法。存在与此Is it OK to use Gson instance as a static field in a model bean (reuse)?相关的旧线程。简单地总结一下,GSON实例应该是线程安全的。