Spring 中 PropertyEditorRegistry 详解

「这是我参与11月更文挑战的第19天,活动详情查看:2021最后一次更文挑战

1.简介

PropertyEditorRegistry : 属性编辑器注册表,顾名思义,主要的作用就是保存 属性编辑器(PropertyEditor),根据需要返回对应的属性编辑器。

PropertyEditor :属性编辑器的接口,它规定了将外部设置值转换为内部JavaBean属性值的转换接口方法

本文主要讲一讲它们两的作用和关系

2.PropertyEditor

2.1 继承关系

图片.png 从上图我们可以发现它的主要的常用的实现类,基本都是 PropertyEditorSupport 下面,我们通常可以继承它,实现自己的自定义属性编辑器,如常见的:String类型属性编辑器,Character类型编辑器....等,都是它的子类。

2.2 主要方法

图片.png

  • void setValue(Object value); :设置更改对象的值,如果是基本类型数据必须要转成包装类,如 int类型数据要转成 Integer
  • Object getValue() :获取属性的值,基本类型数据必须要转成包装类型
  • boolean isPaintable() :确定此属性编辑器是否可绘制。
  • void paintValue(java.awt.Graphics gfx, java.awt.Rectangle box):将值的表示形式绘制到屏幕的给定区域中。
  • String getJavaInitializationString() :返回可用于设置属性的Java代码的片段匹配编辑当前状态。
  • String getAsText() : 以文本的形式获取该属性的值,返回一个String类型的结果
  • void setAsText(String text) throws java.lang.IllegalArgumentException : 通过解析给定字符串来设置属性值,如果解析不了会抛异常。
  • String[] getTags() : 返回表示有效属性值的字符串数组(如boolean属性对应的有效Tag为true和false),以便属性编辑器能以下拉框的方式显示出来。缺省返回null,表示属性没有匹配的字符值有限集合
  • java.awt.Component getCustomEditor() :返回一个组件,可以让人直接编辑当前属性值。如果为空,则可能为空
  • boolean supportsCustomEditor() : 确定该属性是否支持自定义编辑。
  • void addPropertyChangeListener(PropertyChangeListener listener) : 为值的更改添加一个监听器,当值修改后,触发的监听器事件
  • void removePropertyChangeListener(PropertyChangeListener listener) : 移除上面设置的监听器

3.PropertyEditorRegistry

3.1 主要继承关系

这张图是我们后续在讲Spring 容器初始化时,主要用到的,大家可以看到,下面有几个比较重要的实现类,BeanWrapperImpl , TypeConverterSupport 等。 图片.png 下面这张图主要列出了数据绑定相关的继承关系 图片.png

3.2 主要方法

图片.png

  • void registerCustomEditor(Class<?> requiredType, PropertyEditor propertyEditor);
    • 注册一个指定类型的属性编辑器
    • requiredType:指定的属性类型
    • propertyEditor :属性编辑器
  • void registerCustomEditor(@Nullable Class<?> requiredType, @Nullable String propertyPath, PropertyEditor propertyEditor);
    • 为指定类型注册一个自定义的属性编辑器
    • requiredType:指定的属性类型
    • propertyPath:属性的路径(名称或嵌套路径),如果为null给定类型的所有属性注册编辑器
    • propertyEditor :属性编辑器
  • PropertyEditor findCustomEditor(@Nullable Class<?> requiredType, @Nullable String propertyPath)
    • 通过指定的类型和属性,查找自定义属性编辑器
    • requiredType : 指定的类型
    • propertyPath :指定的属性的路径

4.总结

从上面的方法可以很容易的看出 PropertyEditorRegistry 主要就是为了添加和查找 PropertyEditor。在Spring,创建bean时 就会通过 PropertyEditorRegistry 取出对应的 PropertyEditor,给对应的 属性设置或修改它的值。

おすすめ

転載: juejin.im/post/7032150538238197768