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

使用Singleton类中的静态GSON对象将Java对象序列化为JSON,java,serialization,static,singleton,gson,Java,Serialization,Static,Singleton,Gson,我有一个关于独生子女班级行为的问题 场景 我们有合作伙伴使用的Web服务,请求在1秒内频繁出现2-3次。因此,它们被大量使用。我们希望以JSON格式存储请求和响应 到目前为止,在每个webservice接口类中,我们都启动了Gson对象,并将java对象序列化为json 问题 我只是在想,如果我在Singleton类中启动一次Gson对象作为静态对象,然后将它用于java对象到Json的所有请求/响应序列化,它会导致任何问题吗 我的意思是,由于有多个Web服务,而且其中有两个被合作伙伴大量使用,

我有一个关于独生子女班级行为的问题

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

到目前为止,在每个webservice接口类中,我们都启动了Gson对象,并将java对象序列化为json

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


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

来自
Gson的javadoc

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

因此,在您的服务中只有一个
Gson
实例并在每个请求/响应中重用它是可以的。举个例子,你可以考虑创建一个UTL类,比如下面的类:

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);
    }
}
公共抽象类GsonUtils{
私有静态Gson Gson=new Gson();
静止的{
//额外的init逻辑在这里
}
公共静态T fromJson(字符串json,类ClassSoft){
返回gson.fromJson(json,classOfT);
}
公共静态字符串toJson(对象){
if(object==null){
返回“”;
}
返回gson.toJson(对象);
}
}

或者你可以用你自己的方式来做:-)

最近我也有同样的想法。有一个旧线程与此相关。简单总结一下,GSON实例应该是线程安全的。

可能重复的