类型转换
转换器 SPI使用`ConverterFactory`使用`GenericConverter``ConversionService`配置一个`ConversionService``ConversionService`编程方式使用
类型转换Spring 3 引入了一个core.convert提供通用类型转换系统的包。系统定义了一个 SPI 来实现类型转换逻辑和一个 API 来在运行时执行类型转换。在 Spring 容器中,您可以使用此系统作为实现的替代PropertyEditor方案,将外部化的 bean 属性值字符串转换为所需的属性类型。您还可以在应用程序中需要类型转换的任何地方使用公共 API。
转换器 SPI实现类型转换逻辑的 SPI 很简单,而且是强类型的
它是一个典型的Converter实现:
package org.springframework.core.convert.support; final class StringToInteger implements Converter使用ConverterFactory{ public Integer convert(String source) { return Integer.valueOf(source); } }
当您需要集中整个类层次结构的转换逻辑时(例如,从转换String为Enum对象时),您可以实现 ConverterFactory
考虑StringToEnumConverterFactory作为一个例子:
package org.springframework.core.convert.support; final class StringToEnumConverterFactory implements ConverterFactory使用GenericConverter{ public Converter getConverter(Class targetType) { return new StringToEnumConverter(targetType); } private final class StringToEnumConverter implements Converter { private Class enumType; public StringToEnumConverter(Class enumType) { this.enumType = enumType; } public T convert(String source) { return (T) Enum.valueOf(this.enumType, source.trim()); } } }
当您需要复杂的Converter实现时,请考虑使用 GenericConverter接口。
ConversionServiceConversionService定义了一个统一的 API,用于在运行时执行类型转换逻辑。转换器通常在以下外观接口后面运行
大多数ConversionService实现还实现ConverterRegistry了 ,它提供了一个用于注册转换器的 SPI。在内部,ConversionService 实现委托其注册的转换器执行类型转换逻辑。
ConversionService包中提供了一个健壮的实现core.convert.support 。GenericConversionService是适用于大多数环境的通用实现。为创建通用配置ConversionServiceFactory提供了一个方便的工厂。
配置一个ConversionServiceConversionService是一个无状态对象,旨在在应用程序启动时实例化,然后在多个线程之间共享。在 Spring 应用程序中,您通常ConversionService为每个 Spring 容器(或ApplicationContext)配置一个实例。ConversionService每当框架需要执行类型转换时,Spring 就会选择并使用它。您还可以将其 ConversionService注入任何 bean 并直接调用它。
要使用 Spring 注册默认值。
默认值ConversionService可以在字符串、数字、枚举、集合、映射和其他常见类型之间进行转换。要使用您自己的自定义转换器补充或覆盖默认转换器,请设置该converters属性。属性值可以实现任何Converter、ConverterFactory或GenericConverter接口。
ConversionService编程方式使用
要以ConversionService编程方式使用实例,您可以像对任何其他 bean 一样注入对它的引用。以下示例显示了如何执行此 *** 作:
@Service public class MyService { public MyService(ConversionService conversionService) { this.conversionService = conversionService; } public void doIt() { this.conversionService.convert(...) } }
对于大多数用例,您可以使用convert指定 的方法targetType,但它不适用于更复杂的类型,例如参数化元素的集合。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)