类型转换

Spring 3 引入了一个core.convert提供通用类型转换系统的包。系统定义了一个 SPI 来实现类型转换逻辑和一个 API 来在运行时执行类型转换。在 Spring 容器中,您可以使用此系统作为实现的替代PropertyEditor方案,将外部化的 bean 属性值字符串转换为所需的属性类型。您还可以在应用程序中需要类型转换的任何地方使用公共 API。

转换器 SPI

实现类型转换逻辑的 SPI 很简单,而且是强类型的

它是一个典型的Converter实现:

package org.springframework.core.convert.support;

final class StringToInteger implements Converter<String, Integer> {

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

使用ConverterFactory

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

考虑StringToEnumConverterFactory作为一个例子:

package org.springframework.core.convert.support;

final class StringToEnumConverterFactory implements ConverterFactory<String, Enum> {

    public <T extends Enum> Converter<String, T> getConverter(Class<T> targetType) {
return new StringToEnumConverter(targetType);
} private final class StringToEnumConverter<T extends Enum> implements Converter<String, T> { private Class<T> enumType; public StringToEnumConverter(Class<T> 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.supportGenericConversionService是适用于大多数环境的通用实现。为创建通用配置ConversionServiceFactory提供了一个方便的工厂。

配置一个ConversionService

ConversionService是一个无状态对象,旨在在应用程序启动时实例化,然后在多个线程之间共享。在 Spring 应用程序中,您通常ConversionService为每个 Spring 容器(或ApplicationContext)配置一个实例。ConversionService每当框架需要执行类型转换时,Spring 就会选择并使用它。您还可以将其 ConversionService注入任何 bean 并直接调用它。

要使用 Spring 注册默认值。

<bean id="conversionService"
class="org.springframework.context.support.ConversionServiceFactoryBean"/>

默认值ConversionService可以在字符串、数字、枚举、集合、映射和其他常见类型之间进行转换。要使用您自己的自定义转换器补充或覆盖默认转换器,请设置该converters属性。属性值可以实现任何ConverterConverterFactoryGenericConverter接口。

<bean id="conversionService"
class="org.springframework.context.support.ConversionServiceFactoryBean">
<property name="converters">
<set>
<bean class="example.MyCustomConverter"/>
</set>
</property>
</bean>

ConversionService编程方式使用

要以ConversionService编程方式使用实例,您可以像对任何其他 bean 一样注入对它的引用。以下示例显示了如何执行此操作:

@Service
public class MyService { public MyService(ConversionService conversionService) {
this.conversionService = conversionService;
} public void doIt() {
this.conversionService.convert(...)
}
}

对于大多数用例,您可以使用convert指定 的方法targetType,但它不适用于更复杂的类型,例如参数化元素的集合。

最新文章

  1. 欢迎使用 MWeb
  2. 利用Render Texture实现游戏的小雷达效果(摄影机分屏)
  3. HTML5 Canvas实现黑客帝国文字掉落效果
  4. AutoTest简介
  5. Javascript中的迭代、归并方法
  6. Kooboo CMS 介绍
  7. 关于dialog引起的 java.lang.IllegalArgumentException: View=com.android.internal.policy.impl.PhoneWindow$DecorView not attached to window manager 错误的分析
  8. 使用GULP打包、压缩与打版本号
  9. JDBC与反射
  10. php composer 安装
  11. 10天学会phpWeChat——第十天:phpWeChat的会员注册、登录以及微信网页开发
  12. 不使用回调函数的ajax请求实现(async和await简化回调函数嵌套)
  13. java开发工具STS的下载及安装
  14. STM32手记
  15. Python数据可视化-seaborn
  16. 最短路径遍历所有的节点 Shortest Path Visiting All Nodes
  17. hdu 1540(线段树区间合并)
  18. Linux中Readlink命令
  19. django-ORM相关代码及其sql执行次数
  20. asp.net MVC 文件流导出Excel

热门文章

  1. nestjs中swagger的基本使用
  2. 关于 dangerouslySetInnerHTML
  3. 解决pycharm中cv2报错问题,anaconda安装opencv
  4. HTML学习笔记1----HTML是什么
  5. 使用VS Code打造完美的嵌入式IDE
  6. 浅谈tcp 与udp
  7. VisualSvn-Server搭建
  8. css盒子在不同浏览器下的差异
  9. get与post区别,https协议的通信机制
  10. vue引入swiper的报错以及swiper在vue中的交互事件处理