具有自动依赖关系的Spring Boot JavaConfig为null

时间:2014-10-11 14:21:46

标签: java spring annotations spring-boot spring-java-config

我使用Spring Boot和Java编程配置。我正在使用Spring的ConversionService和Spring的Converter接口的几个自定义实现。我想在配置时使用我的ConversionService bean注册所有转换器。问题是这些转换器中的一些具有它们自己的注释配置的依赖关系,并且这些依赖关系没有被连线。例如,配置类如下所示:

@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通过配置类添加了每个Converter实现,但转换器实现中没有任何自动装配字段正在填充。它们是空的。

我目前的解决方案如下:

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

     //The rest of the implementation
}

简而言之,转换器实现中的所有自动装配字段也标注为“Lazy”。这似乎可以在首次访问时填充字段。这感觉就像一个黑客。我的问题是:有没有更好的方法来实现我想要的?我在Spring文档中遗漏了什么?整体方法是否存在缺陷?

1 个答案:

答案 0 :(得分:1)

我不认为这是一个黑客攻击,但并不能保证永远有效。唯一的另一种方法是在单独的Converters中创建ApplicationContext,例如父上下文。请记住,ConversionService将用于创建bean定义并在注入之前转换依赖项,因此它必须在创建任何其他bean之前可用(因此您的null依赖项存在问题)。