2012-06-30 60 views
6

我有這樣的XML:如何使用java配置配置Spring ConversionService?

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

這片配置得到通過上下文掃描 - 我與調試檢查它。問題在哪裏?

+2

注意:你不需要做'的afterPropertiesSet()'和'返回bean.getObject()' - 只返回工廠bean ,Spring會爲你調用'afterPropertiesSet()'和'getObject()'。 –

回答

10

從我的角度來看,您的問題是Bean的名稱。一旦你沒有明確地設置名稱使用@Bean(name="conversionService")將使用的名稱是getConversionService

documentation

這個bean的名稱,或者複數,別名這個bean。如果未指定 ,則bean的名稱是註釋方法的名稱。 如果指定,方法名稱將被忽略。

+0

謝謝,它幫助:) –

0

當您啓用日誌記錄功能時,您將看到Spring創建的豆類,如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豆子。

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

} 
相關問題