Spring 中的各种 Editor,其实都是java.beans包中PropertyEditor的实现类

news/2024/11/7 6:04:37/

java Bean规范中有这样一个接口,PropertyEditor,从这个接口的名字来看,是用来进行编辑属性的,那自然是编辑对象的属性。

        1.为什么需要属性编辑器呢

        我们通常会在类型定义各种类型的属性,通常我们自己通过new创建对象,并且设置属性的时候,我们知道每个字段是什么类型,我们就会设置一个对应类型的值给指定的字段。但是有的时候我们需要将一个字符串,转换为某个字段的类型,因为有些类型,如果是从字符串转换为该类型,比较复杂,所以我们就需要一个工具类来抽取转换的代码,将字符串转换为指定的类型。所以java.beans中定义了PropertyEditor,该接口中定义的void setAsText(String text) 就是将传入的字符串text转换为指定类型的对象,为了方便使用,java为这个接口定义了一个默认的实现类PropertyEditorSupport类,它帮助我们实现了所有的方法,我们只需要继承它就可以使用了。在PropertyEditorSupport定义了一个value的字段,setAsText()中 将字符串转化为指定类型的对象以后,通过setValue() 把该对象赋值给 value字段,这样我们就可以通过getValue()方法获取到我们想要的对象

        2.属性编辑器能完成什么样的功能

        (1) 一个PropertyEditor的实现类,可以帮我们完成把一个字符串转换为一个我们想要的对象

        (2)该类还定义了一个 String getAsText() ,主要就是返回一个能代表指定类型的对象,并且我们看得懂的字符串

        3.在Spring中我们有大量的这种场景,比如我们在一个类中定义了一个URL类型的字段,但是我们在xml文件中通过Property标签配置该字段是只能配置字符串类型,所以就需要一个PropertyEditor 将我们配置的 字符串转换为 URL类型的对象。比如在SpringMvc中,我们定义的接收参数的Model中可能有各种各样类型的字段,有时候还可能定义一个数组类型的字段,但是前端传过来的参数都是字符串,所以就需要有对应的PropertyEditor将字符串转换为想要的类型的对象

我们自定义一个PropertyEditor来测试一下

java">public class PersonEditor extends PropertyEditorSupport {@Overridepublic void setAsText(String text) throws IllegalArgumentException {String[] split = text.split("#");Person person = new Person();person.setName(split[0]);person.setAge(Integer.parseInt(split[1]));this.setValue(person);}@Overridepublic String getAsText() {return ((Person)this.getValue()).getName() + "#" + ((Person)this.getValue()).getAge();}public static void main(String[] args) {PersonEditor personEditor = new PersonEditor();personEditor.setAsText("孙悟空#30");System.out.println(personEditor.getValue());System.out.println(personEditor.getAsText());}
}运行结果:
Person{name='孙悟空', age=30}
孙悟空#30

可以看到我们成功将字符串  孙悟空#30  转换为一个Person对象,这样如果我们在接收参数的Model中定义了Person类型的字段,前端传了 孙悟空#30 ,我们就可以用PersonEditor来将

孙悟空#30  转换为一个Person对象


http://www.ppmy.cn/news/1544975.html

相关文章

【elkb】创建用户和角色

在使用中我们不能把超管的用户信息给到所有者,我们需要为不用的使用场景创建不同的用户。 登录管理员用户 打开管理页面 创建角色 点击角色,创建角色 填写角色信息 设置Kibana 权限 最后点击创建角色 创建用户 点击用户--->创建用户 填写信息 登录…

云渲染与汽车CGI图像技术优势和劣势

在数字时代,云渲染技术以其独特的优势在汽车CGI图像制作中占据了重要地位。云渲染通过利用云计算的分布式处理能力,将渲染任务分配给云端的服务器集群进行计算,从而实现高效、高质量的渲染效果。 这种技术的优势主要体现在以下几个方面&#…

MySQL日期时间函数大全

DAYOFWEEK(date)  返回日期date是星期几(1星期天,2星期一,……7星期六,ODBC标准) mysql> select DAYOFWEEK(1998-02-03);   -> 3 WEEKDAY(date)  返回日期date是星期几(0星期一,1星期二,……6 星期天)。 mysql> select WEEKDAY(1997-10-04 22:23:00);   -> 5…

​基于学习的地铁客流动态预测智能调度方法

1 文章信息 文章题为“A Learning Based Intelligent Train RegulationMethod With Dynamic Prediction forthe Metro Passenger Flow”,该文于2023年发表至“IEEE TRANSACTIONS ON INTELLIGENT TRANSPORTATION SYSTEMS”。文章的核心观点是提出了一种基于学习的智…

c++初阶--vector的使用

大家好,欢迎再次来到我的博客,今天我们来学习一下c中的vector类。和string类一样,我们先学习它的使用,再学习它的实现。 由于模板类的使用和实现都是类似的,所以我们只对和我们之前string类中有补充的或不同的地方进行…

NLP论文速读|LOGO -- Long context aliGnment via efficient preference Optimization

论文速读|LOGO -- Long context aliGnment via efficient preference Optimization 论文信息: 简介: 这篇论文试图解决长上下文模型(Long-context Models, LCMs)在处理长输入序列时的生成性能问题。尽管LCMs在定位上下文中的token级显著信息方…

Python毕业设计选题:基于大数据的旅游景区推荐系统_django

开发语言:Python框架:djangoPython版本:python3.7.7数据库:mysql 5.7数据库工具:Navicat11开发软件:PyCharm 系统展示 系统首页界面 用户注册界面 用户登录界面 景点信息界面 景点资讯界面 个人中心界面 …

TH-OCR 文字识别:开启高效数字化时代

在当今数字化飞速发展的时代,高效准确地处理文字信息变得至关重要。TH-OCR(清华文通光学字符识别系统)作为一款强大的文字识别工具,正逐渐在各个领域发挥着重要作用。 一、TH-OCR 是什么 TH-OCR 是由清华大学电子工程系智能图文信…