diff --git a/org.springframework.context/src/main/java/org/springframework/context/support/ConversionServiceFactoryBean.java b/org.springframework.context/src/main/java/org/springframework/context/support/ConversionServiceFactoryBean.java index b5048ae9927..cc01b73f6ee 100644 --- a/org.springframework.context/src/main/java/org/springframework/context/support/ConversionServiceFactoryBean.java +++ b/org.springframework.context/src/main/java/org/springframework/context/support/ConversionServiceFactoryBean.java @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + package org.springframework.context.support; import java.util.Set; @@ -20,39 +21,51 @@ import java.util.Set; import org.springframework.beans.factory.FactoryBean; import org.springframework.beans.factory.InitializingBean; import org.springframework.core.convert.ConversionService; -import org.springframework.core.convert.converter.Converter; -import org.springframework.core.convert.converter.ConverterFactory; -import org.springframework.core.convert.converter.ConverterRegistry; -import org.springframework.core.convert.converter.GenericConverter; import org.springframework.core.convert.support.ConversionServiceFactory; +import org.springframework.core.convert.support.GenericConversionService; /** * A factory for a ConversionService that installs default converters appropriate for most environments. - * Set the converters property to supplement or override the default converters. + * Set the {@link #setConverters "converters"} property to supplement or override the default converters. + * * @author Keith Donald + * @author Juergen Hoeller * @since 3.0 * @see ConversionServiceFactory#createDefaultConversionService() */ public class ConversionServiceFactoryBean implements FactoryBean, InitializingBean { private Set converters; - - private ConversionService conversionService; + + private GenericConversionService conversionService; + /** - * Configure the set of custom Converters that should be added. + * Configure the set of custom converter objects that should be added: + * implementing {@link org.springframework.core.convert.converter.Converter}, + * {@link org.springframework.core.convert.converter.ConverterFactory}, + * or {@link org.springframework.core.convert.converter.GenericConverter}. */ public void setConverters(Set converters) { this.converters = converters; } - // implementing InitializingBean - public void afterPropertiesSet() { this.conversionService = createConversionService(); - registerConverters(this.converters, (ConverterRegistry) this.conversionService); + ConversionServiceFactory.addDefaultConverters(this.conversionService); + ConversionServiceFactory.registerConverters(this.converters, this.conversionService); } + /** + * Create the ConversionService instance returned by this factory bean. + *

Creates a simple {@link GenericConversionService} instance by default. + * Subclasses may override to customize the ConversionService instance that gets created. + */ + protected GenericConversionService createConversionService() { + return new GenericConversionService(); + } + + // implementing FactoryBean public ConversionService getObject() { @@ -60,41 +73,11 @@ public class ConversionServiceFactoryBean implements FactoryBean getObjectType() { - return ConversionService.class; + return GenericConversionService.class; } public boolean isSingleton() { return true; } - // subclassing hooks - - /** - * Creates the ConversionService instance returned by this factory bean. - * Creates a default conversion service instance by default. - * Subclasses may override to customize the ConversionService instance that gets created. - * @see ConversionServiceFactory#createDefaultConversionService() - */ - protected ConversionService createConversionService() { - return ConversionServiceFactory.createDefaultConversionService(); - } - - // internal helpers - - private void registerConverters(Set converters, ConverterRegistry registry) { - if (converters != null) { - for (Object converter : converters) { - if (converter instanceof Converter) { - registry.addConverter((Converter) converter); - } else if (converter instanceof ConverterFactory) { - registry.addConverterFactory((ConverterFactory) converter); - } else if (converter instanceof GenericConverter) { - registry.addGenericConverter((GenericConverter) converter); - } else { - throw new IllegalArgumentException("Each converter must implement one of the Converter, ConverterFactory, or GenericConverter interfaces"); - } - } - } - } - } diff --git a/org.springframework.context/src/main/java/org/springframework/format/support/FormattingConversionServiceFactoryBean.java b/org.springframework.context/src/main/java/org/springframework/format/support/FormattingConversionServiceFactoryBean.java index dca9d1175c1..cd4481898e6 100644 --- a/org.springframework.context/src/main/java/org/springframework/format/support/FormattingConversionServiceFactoryBean.java +++ b/org.springframework.context/src/main/java/org/springframework/format/support/FormattingConversionServiceFactoryBean.java @@ -51,12 +51,25 @@ public class FormattingConversionServiceFactoryBean private static final boolean jodaTimePresent = ClassUtils.isPresent( "org.joda.time.DateTime", FormattingConversionService.class.getClassLoader()); + private Set converters; + private FormattingConversionService conversionService; + /** + * Configure the set of custom converter objects that should be added: + * implementing {@link org.springframework.core.convert.converter.Converter}, + * {@link org.springframework.core.convert.converter.ConverterFactory}, + * or {@link org.springframework.core.convert.converter.GenericConverter}. + */ + public void setConverters(Set converters) { + this.converters = converters; + } + public void afterPropertiesSet() { this.conversionService = new FormattingConversionService(); ConversionServiceFactory.addDefaultConverters(this.conversionService); + ConversionServiceFactory.registerConverters(this.converters, this.conversionService); installFormatters(this.conversionService); }