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).
我有以下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 allObjectMapper
beans (including the defaulted ones).