将ConversionService注入自定义Converter


问题内容

使用Spring MVC-3。我正在编写一个自定义Converter,它需要访问注册到ConversionService的其他Converter。

我该怎么做?我尝试将自定义转换器编写为:

  class CustomConverter<X, Y>{
     @Autowired ConversionService service;
     //+getter & setters of service

     public Y convert(X input){
          // I need access to service to lookup simple conversions such as
          // String array to Long array etc..

     }

  }

我通过applicationContext.xml注册了自定义转换器

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

但是,spring拒绝将服务注入到我的CustomConverter中(它始终为null)。我该怎么做?

谢谢!


问题答案:

我最近使用类似的东西来解决这个问题。使用自定义工厂:

public class MyConversionServiceFactoryBean extends ConversionServiceFactoryBean {

    @Override
    public void afterPropertiesSet() {
        super.afterPropertiesSet();
        ConversionService conversionService = getObject();
        ConverterRegistry registry = (ConverterRegistry) conversionService;
        // register converters that need a nested conversion service
        registry.addConverter(new MyCustomConverter(conversionService));
    }
}

声明如下:

<bean id="conversionService"
    class="com.company.MyConversionServiceFactoryBean">
    <property name="converters">
        <list>
            ... declare standard converters here ...
        </list>
    </property>
</bean>