Spring系列之类型转换-12

Spring系列之类型转换-12,第1张

Spring系列之类型转换-12

目录

类型转换

转换器 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 {

    public Integer convert(String source) {
        return Integer.valueOf(source);
    }
}
使用ConverterFactory

当您需要集中整个类层次结构的转换逻辑时(例如,从转换String为Enum对象时),您可以实现 ConverterFactory

考虑StringToEnumConverterFactory作为一个例子:

package org.springframework.core.convert.support;

final class StringToEnumConverterFactory implements ConverterFactory {

    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());
        }
    }
}
使用GenericConverter

当您需要复杂的Converter实现时,请考虑使用 GenericConverter接口。

ConversionService

ConversionService定义了一个统一的 API,用于在运行时执行类型转换逻辑。转换器通常在以下外观接口后面运行

大多数ConversionService实现还实现ConverterRegistry了 ,它提供了一个用于注册转换器的 SPI。在内部,ConversionService 实现委托其注册的转换器执行类型转换逻辑。

ConversionService包中提供了一个健壮的实现core.convert.support 。GenericConversionService是适用于大多数环境的通用实现。为创建通用配置ConversionServiceFactory提供了一个方便的工厂。

配置一个ConversionService

ConversionService是一个无状态对象,旨在在应用程序启动时实例化,然后在多个线程之间共享。在 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,但它不适用于更复杂的类型,例如参数化元素的集合。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5708632.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存