我在使用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
。Spring找到我的
ConversionServiceFactoryBean
定义并启动它。不幸的是,
ConfigurationPropertiesBindingPostProcessor
是在注册AutowiredAnnotationBeanPostProcessor
之前创建的。因此,它的所有依赖项都不是自动装配的。导致我的所有转换器无法自动接线。有谁知道如何防止这种行为?还是我必须摆脱ConversionService,因为它似乎无法将Converters与自动装配字段一起使用?
最佳答案
不要将您的ConversionService
conversionService
,check the doc命名为基本上可以解释您所发现的内容的名称。
@Bean
public ConversionService myConversionService() {
// your setup
}
这将注册一个
myConversionService
(注意方法名称),该配置文件不会急于加载它。如果您需要一些转换器来强制配置中的值(如文档中所定义),请考虑使用ConfigurationPropertiesBinding
标记这些转换器:@Component
@ConfigurationPropertiesBinding
// This can't autowire things either ...
public class ExampleConverter implements MyConverter<Something, SomethingElse> { ... }
关于java - Spring -ConversionConfiguration否@Autowired由于ConfigurationPropertiesBindingPostProcessor,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38971034/