Jackson如何自动获取模块bean?

How Jackson taking module beans automatically?

我有以下class

@SpringBootApplication
public class TestApplication {

    public static void main(final String[] args) {

        SpringApplication.run(TestApplication.class, args);
    }

    @Bean
    public Module jdk8Module() {
        return new Jdk8Module();
    }

    @Bean
    public Module guavaModule() {
        return new GuavaModule();
    }
} 

这里这两个bean自动注册到jackson ObjectMapper中。它是如何自动注册这个模块的?

任何 com.fasterxml.jackson.databind.Module 类型的 bean 都会自动注册到自动配置的 Jackson2ObjectMapperBuilder 并应用于它创建的任何 ObjectMapper 实例。这提供了一种全局机制,用于在您向应用程序添加新功能时贡献自定义模块。所以定义一个bean应该就足够了,它会自动注册到jackson ObjectMapper中。

这是由 Spring 启动完成的 JacksonAutoConfiguration class。

正如 javadoc 所说:

Auto configuration for Jackson. The following auto-configuration will get applied:

  • an ObjectMapper in case none is already configured.
  • a Jackson2ObjectMapperBuilder in case none is already configured.
  • auto-registration for all Module beans with all ObjectMapper beans (including the defaulted ones).