2017-11-29 8 views
0

저는 Spring/Spring Boot가 유지 보수 담당 DI를 관리하는 방법을 이해하려고합니다.Spring Boot에서 Jackson ObjectMapper를 어떻게 구성합니까?

@Configuration 
class MyAppInjector { 
    @Autowired 
    void configureJackson(ObjectMapper objectMapper) { 
     SimpleModule jacksonModule = new SimpleModule() 
       .addDeserializer(AccountDeserializer, new AccountDeserializer()) 
       .addDeserializer(PhoneNumberDeserializer, new PhoneNumberDeserializer()) 
       .addDeserializer(AddressDeserializer, new AddressDeserializer()) 
       .addDeserializer(ContactDeserializer, new ContactDeserializer()) 
       .addDeserializer(CustomerDeserializer, new CustomerDeserializer()) 
       .addDeserializer(DeploymentInfoDeserializer, new DeploymentInfoDeserializer()) 
       .addDeserializer(ServiceAgreementDeserializer, new ServiceAgreementDeserializer()) 

     objectMapper.registerModule(jacksonModule) 
    } 
} 

그러나 나는 configureJackson(...) 어디서나 내 응용 프로그램의 소스 코드 내부에서 호출이 표시되지 않습니다 :이 응용 프로그램 내부에서 나는이처럼 보이는 MyAppInjector 그루비 파일을 참조하십시오. I 이 방법은 JSON을 POJO로 serialize하기 위해 Spring에서 사용하는 Jackson ObjectMapper을 구성한다고 가정합니다.

여기에서 ObjectMapper을 구성하는 방법은 무엇입니까? @Configuration으로 주석이 달린 항목을 찾은 다음 어딘가에 등록 된 Jackson ObjectMapper을보고이 configureJackson(...) 방법으로 전달합니까? 나에게 마술처럼 보입니다 ...

그리고 이건 의 방법은 @Configuration으로 주석을 달았습니다.

@Configuration 
class MyAppInjector { 
    @Autowired 
    Fizz fizz(Buzz buzz) { 
     new Fizz(buzz) 
    } 

    @Autowired 
    void configureJackson(ObjectMapper objectMapper) { 
     SimpleModule jacksonModule = new SimpleModule() 
       .addDeserializer(AccountDeserializer, new AccountDeserializer()) 
       .addDeserializer(PhoneNumberDeserializer, new PhoneNumberDeserializer()) 
       .addDeserializer(AddressDeserializer, new AddressDeserializer()) 
       .addDeserializer(ContactDeserializer, new ContactDeserializer()) 
       .addDeserializer(CustomerDeserializer, new CustomerDeserializer()) 
       .addDeserializer(DeploymentInfoDeserializer, new DeploymentInfoDeserializer()) 
       .addDeserializer(ServiceAgreementDeserializer, new ServiceAgreementDeserializer()) 

     objectMapper.registerModule(jacksonModule) 
    } 
} 

... 그리고 Buzz 인스턴스가 건설시 Fizz에 통과하는 봄이 지능적으로보고 기대 : 내가 좋아하는 방법을 만들 수 있습니다 의미?

답변

1

SpringBoot는 ObjectMapper를 인스턴스화합니다. 이는 Spring에서 JSON으로 변환하거나 그 반대로 사용됩니다. 따라서 클래스 패스에서 Spring 부트를 발견하면 objectMapper를로드합니다. 이제 configureJackson 메서드에서 ObjectMapper 및 @Autowired 주석을 참조하므로 Spring은이 메서드에 ObjectMapper의 인스턴스를 제공합니다.

@Autowired 주석은 당신이 말하는 마법을하고 있습니다.

Fizz fizz(Buzz buzz) { 
    new Fizz(buzz) 
} 

@Autowired이 예에서는 Apring는 소다 방법에서의 버즈 인스턴스를 주입한다.