2012-06-30 39 views
6

Tôi có xml như vậy:Làm thế nào để cấu hình Spring ConversionService với cấu hình java?

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

Nó định cấu hình bộ chuyển đổi mà không gặp sự cố.

Nhưng sau đó mã này không thực hiện giống nhau:

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

Đoạn cấu hình được quét bởi bối cảnh - Tôi đã kiểm tra nó với trình gỡ lỗi. Trường hợp có thể là vấn đề?

+2

NB này: bạn không cần phải làm như 'afterPropertiesSet() 'và' trở bean.getObject() '- chỉ cần trả lại đậu nhà máy , Spring sẽ gọi 'afterPropertiesSet()' và 'getObject()' cho bạn. –

Trả lời

10

Từ quan điểm của tôi, vấn đề của bạn là tên Bean. Khi bạn không đặt tên rõ ràng bằng cách sử dụng @Bean(name="conversionService") tên sẽ được sử dụng là getConversionService.

Từ documentation:

Tên của đậu này, hoặc nếu số nhiều, bí danh cho đậu này. Nếu trái không xác định tên của bean là tên của phương thức được chú thích. Nếu được chỉ định, tên phương thức sẽ bị bỏ qua.

+0

Cảm ơn, nó đã giúp :) –

0

Khi bạn bật ghi nhật ký, bạn sẽ thấy Đậu nào được tạo bởi Spring, như được mô tả here.

cấu hình Log

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

đầu ra Log

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

sao chép + dán mã của bạn và nó làm việc mà không thay đổi tên. Tôi tiêm các ConversionService như sau:

@Resource 
private ConversionService conversionService; 

này hoạt động vì Autowiring by type. Vì vậy, có thể bạn đã có hai hạt ConversionService.

8

Trong SpringMVC bạn có thể mở rộng WebMvcConfigurerAdapter và sử dụng nó cho cấu hình dựa trên Java. Để đăng ký chuyển đổi tùy chỉnh, bạn có thể thay đổi "addFormatters" -Method như

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

} 
Các vấn đề liên quan