2014-10-11 2 views
2

Java 프로그래밍 방식 구성으로 Spring 부트를 사용하고 있습니다. Spring의 ConversionService와 Spring의 Converter 인터페이스에 대한 몇 가지 사용자 정의 구현을 사용하고 있습니다. 구성 시간에 모든 ConversionService Bean에 모든 변환기를 등록하고 싶습니다. 이러한 변환기 중 일부는 자체적 인 주석 구성 종속성을 가지며 이러한 연결은 유선 연결이 아닙니다.자동 부팅 종속성이있는 스프링 부트 JavaConfig null

@Configuration 
public class MyConfig extends WebMvcConfigurerAdapter 
{ 
    @Bean 
    public ConversionService conversionService(List<Converter> converters) 
    { 
     DefaultConversionService conversionService = DefaultConversionService(); 
     for (Converter converter: converters) 
     { 
      conversionService.addConverter(converter); 
     } 
     return conversionService; 
    } 
} 

그리고 다음과 같이 컨버터 구현의 일부가 될 수있다 :

@Component 
public class ConverterImpl implements Converter 
{ 
    @Autowired 
    private DependentClass myDependency; 

    //The rest of the implementation 
} 

을 conversionService 모든 컨버터 구현이 구성을 통해 추가 데 있지만 예를 들어 구성 클래스는 다음과 같이이다 클래스에서 변환기 구현의 자동 완성 필드 중 어느 것도 채워지지 않습니다. 그들은 null입니다. 요컨대

@Component 
public class ConverterImpl implements Converter 
{ 
    @Lazy 
    @Autowired 
    private DependentClass myDependency; 

    //The rest of the implementation 
} 

는 컨버터 구현 autowire가 모든 필드는 '엽기'이라고 주석되어 다음과 같이

나의 현재 솔루션이다. 이 필드는 처음 액세스 할 때 채워지는 필드로 작동합니다. 이것은 해킹처럼 느껴집니다. 내 질문은 : 내가 원하는 것을 성취 할 수있는 더 좋은 방법이 있습니까? 스프링 문서에서 뭔가 빠졌습니까? 전반적인 접근법에 결함이 있습니까?

답변

1

해킹이라고 생각하지 않지만 항상 작동한다는 보장은 없습니다. 다른 방법으로 Converters을 별도의 ApplicationContext에 만들면됩니다. 부모 문맥 ConversionService은 빈 정의를 작성하고이를 삽입하기 전에 종속성을 변환하는 데 사용되므로 다른 빈을 작성하기 전에 사용할 수 있어야합니다 (따라서 널 종속성 문제).

관련 문제