小编典典

如何使用java config配置Spring ConversionService?

spring

我有这样的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;
    }
}

这部分配置按上下文进行扫描-我通过调试器对其进行了检查。问题可能出在哪里?


阅读 561

收藏
2020-04-21

共2个答案

小编典典

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

从文档:

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

2020-04-21
小编典典

在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();
    }

}
2020-04-21