如何使用java配置配置Spring ConversionService?

我有这样的xml:

        

它可以毫无问题地配置转换器。

但是这段代码没有做同样的事情:

 @Configuration public class ConversionConfiguration { @Bean public ConversionService getConversionService() { ConversionServiceFactoryBean bean = new ConversionServiceFactoryBean(); bean.setConverters(getConverters()); bean.afterPropertiesSet(); ConversionService object = bean.getObject(); return object; } private Set getConverters() { Set converters = new HashSet(); converters.add(new AddressToStringConverter()); converters.add(new StringToAddressConverter()); return converters; } } 

这个配置由上下文扫描 – 我用调试器检查了它。 哪里可能是问题?

从我的角度来看,你的问题是Bean名称。 一旦您没有使用@Bean(name="conversionService")显式设置名称,将使用的名称是getConversionService

从文档 :

此bean的名称,或者如果是复数,则为此bean的别名。 如果未指定,则bean的名称是带注释的方法的名称。 如果指定,则忽略方法名称。

在SpringMVC中,您可以扩展WebMvcConfigurerAdapter并将其用于基于Java的配置。 要注册自定义转换器,您可以像这样修改“addFormatters”-Method

 @Configuration @EnableWebMvc @ComponentScan(basePackages = { "..." }) public class ApplicationConfiguration extends WebMvcConfigurerAdapter { @Override public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) { configurer.enable(); } @Bean public InternalResourceViewResolver getInternalResourceViewResolver() { InternalResourceViewResolver resolver = new InternalResourceViewResolver(); resolver.setPrefix("/WEB-INF/views/"); resolver.setSuffix(".jsp"); return resolver; } @Override public void addFormatters(FormatterRegistry formatterRegistry) { formatterRegistry.addConverter(getMyConverter()); } @Bean public StringToCounterConverter getMyConverter() { return new StringToCounterConverter(); } } 

启用日志记录后,您将看到Spring创建了哪些Bean,如此处所述。

日志配置

   

记录输出

  DEBUG (AbstractAutowireCapableBeanFactory.java:458) - Finished creating instance of bean 'getConversionService' 

我复制+粘贴你的代码,它工作而不改变名称。 我按如下方式注入了ConversionService

 @Resource private ConversionService conversionService; 

这是因为按类型自动assembly 。 所以也许你有两个ConversionService bean。