将ObjectMapper声明为bean有什么好处?

时间:2018-05-16 05:15:02

标签: java json oop static jackson

让我们说我只想要一个ObjectMapper对象的普通实例。将它声明为bean有什么好处吗?

@Bean
public ObjectMapper objectMapper() {
    return new ObjectMapper();
}

为什么不在我们每次需要的时候通过ObjectMapper创建一个新的new ObjectMapper()

或者将其声明为静态对象?

private static final ObjectMapper mapper = new ObjectMapper();

1 个答案:

答案 0 :(得分:6)

以下是有关ObjectMapper

的API说明
  

映射器实例完全线程安全 ,前提是实例的所有配置都发生在任何读取或写入调用之前。如果在首次使用后修改映射器的配置,则更改可能会也可能不会生效,配置调用本身可能会失败。

以下是improve jackson performance的指南:

  

重用重量级对象:ObjectMapper(数据绑定)和JsonFactory(流API)   在较小的程度上,您可能还想重用ObjectReader和ObjectWriter实例 - 这只是一些锦上添花,但它们完全是线程安全且可重用的

总结一下:

  • ObjectMapper是线程安全的,只要您没有动态更改配置

  • ObjectMapper初始化是一项繁重的操作

因此,请将ObjectMapper声明为@Bean

  • 提高解析性能(因为解析时不需要重新初始化实例)

  • 减少内存使用量(创建的对象减少)

  • ObjectMapper方法返回的@Bean已完全配置。它是线程安全的。 (但显然,不要修改@Autowired实例XD)

  • 为您的应用程序提供通用配置(例如时区,null故障转移配置...)