public void registerConverterClass(Class<? extends Converter> converterClass) { Converter converter = BeanUtil.newInstance(converterClass); ConversionTypes types = new ConversionTypes(converter); configuredConverterClasses.put(types, converterClass); if (converter.isParallelizable()) converterPrototypes.put(types, converter); }
public <S, T> Converter<S, T> createConverter(Class<S> sourceType, Class<T> targetType) { // check preconditions if (targetType == null) throw new ConversionException("targetType must be specified"); // check if we already know how to do this conversion ConversionTypes conversionTypes = new ConversionTypes(sourceType, targetType); Converter result = converterPrototypes.get(conversionTypes); if (result != null) return cloneIfSupported(result); // we need to investigate... result = searchAppropriateConverter(sourceType, targetType); // ...and cache the result for future requests if (result != null && result.isParallelizable()) converterPrototypes.put(conversionTypes, result); // inject context if appropriate injectContext(result); // done return result; }