繁体   English   中英

春季-ConversionConfiguration否@Autowired因为ConfigurationPropertiesBindingPostProcessor

[英]Spring - ConversionService no @Autowired because of ConfigurationPropertiesBindingPostProcessor

我在使用Spring ConversionService时发现了一个问题(首先我认为这与我的测试有关,但这是我的错误,总是会发生)。 我尝试通过...创建它

@Configuration
@ComponentScan(basePackages={"com.mybasepacke"})
public class MyConfiguration {

    @Bean   
    @SuppressWarnings("rawtypes")
    public ConversionServiceFactoryBean conversionService(ApplicationContext context) {

        ConversionServiceFactoryBean factory = new ConversionServiceFactoryBean();

        Map<String, MyConverter> converters = context.getBeansOfType(MyConverter.class);
        factory.setConverters(new HashSet<>(converters.values()));
        factory.afterPropertiesSet();

        return factory;
    }
}

这样,我希望能够像这样简单地创建ConverterMyConverter只是扩展Spring的Converter的标记接口)。

@Component
public class ExampleConverter implements MyConverter<Something, SomethingElse> {

    @Autowired
    private SomeService someService;
... }

Spring应该找到所有MyConverter ,并将它们全部添加到ConversionService (工厂)中,然后就可以使用它们了...从理论上讲。 实际上,发生这种情况:

  1. ConfigurationPropertiesBindingPostProcessor被初始化。
  2. 它可选地依赖于ConversionService
  3. Spring找到我的ConversionServiceFactoryBean定义并启动它。
  4. 不幸的是,在注册AutowiredAnnotationBeanPostProcessor之前创建ConfigurationPropertiesBindingPostProcessor 因此,它的所有依赖项都不是自动装配的。 导致我的所有转换器无法自动接线。

有谁知道如何防止这种行为? 还是我必须摆脱ConversionService,因为它似乎无法将Converters与自动装配字段一起使用?

不要将您的ConversionService命名为conversionService请检查基本说明您所发现内容的文档

@Bean   
public ConversionService myConversionService() {
  // your setup 
}

这将注册一个myConversionService (注意方法名称),该配置文件不会急于加载它。 如果您需要一些转换器来强制配置中的值(如文档中所定义),请考虑使用ConfigurationPropertiesBinding标记这些转换器:

@Component
@ConfigurationPropertiesBinding
// This can't autowire things either ...
public class ExampleConverter implements MyConverter<Something, SomethingElse> { ... }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM