2014-10-11 126 views
2

我正在使用Java編程配置的Spring Boot。我使用Spring的ConversionService和Spring的Converter界面的幾個自定義實現。我想在配置時使用我的ConversionService bean註冊所有轉換器。值得注意的是,其中一些轉換器具有自己的註釋配置依賴關係,並且這些轉換器沒有連接。例如配置類是類似以下內容:彈簧引導JavaConfig與空的自動裝配依賴關係

@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是有每一個轉換器實現通過配置加入到它類中,沒有任何轉換器實現中的自動裝配字段正在填充。它們是空的。

我當前的解決方案如下:

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

    //The rest of the implementation 
} 

總之,在該轉換器的實現的所有自動裝配字段也標註爲「懶惰」。這似乎是在第一次訪問字段時填充的。這感覺像是一個黑客。我的問題是:有沒有更好的方法來實現我想要的?我在Spring文檔中丟失了什麼?總體方法是否有缺陷?

回答

1

我不認爲這是一個黑客,但它並不保證總是工作。這樣做的唯一方法是在單獨的ApplicationContext中創建您的Converters,例如,父上下文。請記住,ConversionService將用於創建bean定義並在注入它們之前轉換依賴項,因此它必須在創建任何其他bean之前可用(因此您的空依賴關係問題)。