java - 我应该将Jackson的ObjectMapper声明为静态字段吗?

杰克逊图书馆的ObjectMapperclassseems to be thread safe
这是否意味着我应该将我的ObjectMapper声明为这样的静态字段?

class Me {
    private static final ObjectMapper mapper = new ObjectMapper();
}

而不是像这样的实例级字段?
class Me {
    private final ObjectMapper mapper = new ObjectMapper();
}


最佳答案:

是的,这是安全的,推荐的。
您所引用的页面中唯一的警告是,一旦映射器被共享,您就不能修改它的配置;但是您没有更改配置,所以这是可以的。如果您确实需要更改配置,那么您可以从静态块中进行更改,这样也可以。
编辑:(2013/10)
对于2.0及以上版本,可以通过注意到还有一种更好的方法来增加上述内容:使用ObjectWriterObjectReader对象,这些对象可以由ObjectMapper构建。
它们是完全不可变的,线程安全的,这意味着在理论上甚至不可能导致线程安全问题(如果代码试图重新配置实例,则使用ObjectMapper可能会发生这种问题)。