2012-06-30 8 views
6

que tienen tales xml:¿Cómo se configura Spring ConversionService con java config?

<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean"> 
     <property name="converters"> 
      <list> 
       <bean class="converters.AddressToStringConverter" /> 
       <bean class="converters.StringToAddressConverter" /> 
      </list> 
     </property> 
    </bean> 

Se configura convertidores sin problemas.

Pero entonces el código deja de hacer lo mismo:

@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; 
    } 
} 

Esta pieza de configuración se escanea por el contexto - lo he comprobado con depurador. ¿Dónde prodría estar el problema?

+2

Nota: no es necesario hacer el 'afterPropertiesSet()' y 'volver bean.getObject()' - acaba de devolver el grano de la fábrica , Spring invocará 'afterPropertiesSet()' y 'getObject()' por usted. –

Respuesta

10

Desde mi punto de vista, su problema es el nombre Bean. Una vez que no establece explícitamente el nombre usando @Bean(name="conversionService"), el nombre que se utilizará es getConversionService.

De documentation:

El nombre de este frijol, o si plural, alias para este bean. Si se deja sin especificar, el nombre del bean es el nombre del método anotado. Si se especifica, el nombre del método se ignora.

+0

Gracias, ayudó :) –

0

Cuando habilita el registro, verá qué beans son creados por Spring, como se describe here.

configuración del registro

<logger name="org.springframework.beans" level="DEBUG" /> 

salida del registro

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

copio + pegar el código y funcionó sin cambiar el nombre. Inyecté la ConversionService de la siguiente manera:

@Resource 
private ConversionService conversionService; 

Esto funciona debido a Autowiring by type. Entonces tal vez tenías dos frijoles ConversionService.

8

En SpringMVC puede extender WebMvcConfigurerAdapter y usarlo para configuraciones basadas en Java. Para registrar convertidores personalizados se pueden modificar las "addFormatters" -method como esto

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

} 
Cuestiones relacionadas