我有这样的xml:
<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
<property name="converters">
<list>
<bean class="converters.AddressToStringConverter" />
<bean class="converters.StringToAddressConverter" />
</list>
</property>
</bean>
它可以毫无问题地配置转换器。
但是这段代码没有做同样的事情:
@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<Converter> getConverters() {
Set<Converter> converters = new HashSet<Converter>();
converters.add(new AddressToStringConverter());
converters.add(new StringToAddressConverter());
return converters;
}
}
这个配置由上下文扫描 - 我用调试器检查了它。哪个可能是问题?
答案 0 :(得分:10)
从我的角度来看,您的问题是Bean
名称。如果您没有使用@Bean(name="conversionService")
明确设置名称,则使用的名称为getConversionService
。
此bean的名称,或者如果是复数,则为此bean的别名。如果离开了 未指定bean的名称是带注释的方法的名称。 如果指定,则忽略方法名称。
答案 1 :(得分:8)
在SpringMVC中,您可以扩展WebMvcConfigurerAdapter并将其用于基于Java的配置。要注册自定义转换器,您可以修改“addFormatters” - 像这样的方法
@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();
}
}
答案 2 :(得分:0)
启用日志记录后,您将看到Spring创建了哪些Bean,如here所述。
日志配置
<logger name="org.springframework.beans" level="DEBUG" />
日志输出
DEBUG (AbstractAutowireCapableBeanFactory.java:458) - Finished creating instance of bean 'getConversionService'
我复制+粘贴了你的代码,但它没有更改名称。我按如下方式注入了ConversionService
:
@Resource
private ConversionService conversionService;
这是因为Autowiring by type。所以也许你有两个ConversionService
豆。