wlt*_*eng 2 java oop static json jackson
假设我只想要ObjectMapper对象的普通实例。将其声明为bean有什么好处?
@Bean
public ObjectMapper objectMapper() {
    return new ObjectMapper();
}
为什么不每当我们需要时就制作一个新ObjectMapper的new ObjectMapper()?
还是将其声明为静态对象?
private static final ObjectMapper mapper = new ObjectMapper();
这是关于ObjectMapper的API注释
映射器实例是完全线程安全的, 前提是实例的所有配置都在ANY读取或写入调用之前进行。如果在首次使用后修改了映射器的配置,则更改可能会或可能不会生效,并且配置调用本身可能会失败。
这是改善杰克逊性能的准则:
重用重量级的对象:ObjectMapper(数据绑定)和JsonFactory(流API)在较小程度上,您可能还想重用ObjectReader和ObjectWriter实例-这只是锦上添花,但它们完全是线程化的,安全且可重复使用
总结一下:
ObjectMapper 是线程安全的,只要您没有即时更改配置
ObjectMapper 初始化是一项繁重的操作
因此,声明你ObjectMapper的@Bean意愿:
提高解析性能(因为在解析时不需要重新初始化实例)
减少内存使用(创建更少的对象)
您ObjectMapper从@Bean方法返回的信息已完全配置。这是线程安全的。(但显然不要修改@Autowired实例XD)
为您的应用程序提供通用配置(例如时区,空故障转移配置...)
| 归档时间: | 
 | 
| 查看次数: | 903 次 | 
| 最近记录: |