[英]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;
}
}
这样,我希望能够像这样简单地创建Converter
( MyConverter
只是扩展Spring的Converter
的标记接口)。
@Component
public class ExampleConverter implements MyConverter<Something, SomethingElse> {
@Autowired
private SomeService someService;
... }
Spring应该找到所有MyConverter
,并将它们全部添加到ConversionService
(工厂)中,然后就可以使用它们了...从理论上讲。 实际上,发生这种情况:
ConfigurationPropertiesBindingPostProcessor
被初始化。 ConversionService
。 ConversionServiceFactoryBean
定义并启动它。 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.