之前有同事引入了pig-cloud。
但是一些使用和配置的非常不友好,比如jackson,
图1
此配置是覆盖原始配置的,会导致jackson的很多默认加载项不加载,如果你明确知道原始配置做了哪些事情,你可以直接使用,但是很明显,jackson的推荐配置方式不是这样的,可以看JacksonAutoConfiguration下有个配置
该类配置目标同图1一致,但是他的依赖bean里有一个List
可以看到这是一个接口,那他的实现类有哪些呢
就在他的下方
这个配置里做了很多事情 ,包括对名为spring.jackson.*下的配置的加载,如果你使用图1的形式覆盖,就会导致这些配置失效。
那么应该如何配呢?很显然,跟标准实现做同样的事就行了
配置的加载是按ordered排序,从小到大,所以源码中的标准实现的ordered是0,只需要你的配置大于0,即可覆盖默认的配置。
再来说一下常见的加载,在标准实现里可以看到n多的默认模块加载。
我们常用的比如JavaTimeModule。
最常见的方式就是像图1中的配置,通过builder去设置,但是看源码就知道,这是一种覆盖式的设置,相当于你加了一个就只有这一个配置了,
但是很显然,spring更推荐通过bean注入的方式添加,在没有任何配置时,spring默认有如下module,即使我们不熟悉,也可以知道,spring是通过收集同类型的bean去注册的,所以只需要照本宣科就行
只需要增加一个配置
就可以在启动时看到,他被加载并注册到jackson的module了
所以实现Jackson2ObjectMapperBuilderCustomizer, Ordered的方式配置Jackson的各种配置,不仅方便于多模块项目,common模块写公共部分省配置,又可以通过设置高于公共模块的ordered来实现对公共模块的覆盖与自定义,非常优雅有木有!
所以下次别再写图1这样的配置了