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

Jackson库的ObjectMapperclass似乎是线程安全的

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

给我上课{
私有静态最终ObjectMapper mapper=新ObjectMapper();
}

而不是像这样作为实例级字段

给我上课{
私有最终ObjectMapper mapper=新ObjectMapper();
}

是的,这是安全的建议

你提到的页面中唯一的警告是,一旦映射器被共享,你就不能修改它的配置;但您并没有改变配置,所以这很好。如果您确实需要更改配置,您可以从静态块进行更改,这样也可以

编辑:(2013/10)

在2.0及以上版本中,可以通过注意到还有一种更好的方法来扩充上述内容:使用ObjectWriterObjectReader对象,这些对象可以由ObjectMapper构建。
它们是完全不可变的、线程安全的,这意味着理论上甚至不可能导致线程安全问题(如果代码尝试重新配置实例,则在ObjectMapper中可能会发生这种情况)

发表评论