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

杰克逊图书馆的ObjectMapper班级似乎是线程安全的。

这是否意味着我应该ObjectMapper像这样将我声明为静态字段?

class Me {

private static final ObjectMapper mapper = new ObjectMapper();

}

而不是像这样的实例级字段?

class Me {

private final ObjectMapper mapper = new ObjectMapper();

}

回答:

的,建议你这样做是安全的。

你所引用页面的唯一警告是,一旦共享了映射器,你将无法修改它的配置。但是你不更改配置,这样就可以了。如果确实需要更改配置,则可以从静态块执行此操作,也可以。

在2.0及更高版本中,可以通过注意到还有一个更好的方法来增强上述功能:使用ObjectWriterObjectReader对象,可以通过构造ObjectMapper。它们是完全不变的,线程安全的,这意味着从理论上讲甚至不可能导致线程安全问题(ObjectMapper如果代码尝试重新配置实例,则可能会发生此问题)。

以上是 我应该将Jackson的ObjectMapper声明为静态字段吗? 的全部内容, 来源链接: utcz.com/qa/429839.html

回到顶部