SpringIOC自定义属性编辑器PropertyEditor

Posted Magic_Li

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringIOC自定义属性编辑器PropertyEditor相关的知识,希望对你有一定的参考价值。


Spring中我们可以使用属性编辑器来将特定的字符串转换为对象
String--转换-->object

java.beans.PropertyEditor(JDK中的接口)用于将xml文件中字符串转换为特定的类型,同时JDK为我们提供一个实现类java.beans.PropertyEditorSupport

Spring在注入时,如果遇到类型不一致(例如需要Address类型但是用户传了个String)则会去调用相应的属性编辑器进行转换

spring会调用属性编辑器的setAsText(String str)进行处理用户传的字符串,并调用getValue()方法获取处理后得到的对象
在代码中处理完后需要调用setValue方法,要不然spring调用getValue方法拿不到处理后转换成的对象

自定义属性编辑器示例:
注意:在配置文件中CustomEditorConfigurer类的使用,在htmlsingle中直接搜索类名即可

Address类

public class Address {
private String city;
private String street;
private String country;
set/get
.....
}

Student类

public class Student {
private long id;
private String name;
private boolean gender;
private int age;
private Address address;
get/set
...
}

自定义编辑器类

public class AddressEditor extends PropertyEditorSupport {

@Override
public String getAsText() {
return super.getAsText();
}

//Spring遇到数据类型不一致并且不能自己处理的时候会调用这个方法处理字符串
@Override
public void setAsText(String text) throws IllegalArgumentException {
String[] str = text.split(",");
String city = str[0];
String street = str[1];
String country = str[2];
Address add = new Address(city, street, country);
setValue(add);
}

}

xml文件:

<!-- 这个配置指明哪个类型对应哪个自定义编辑器 -->
<bean class="org.springframework.beans.factory.config.CustomEditorConfigurer">
<property name="customEditors">
<map>
<entry key="com.briup.ioc.proEdit.Address" value="com.briup.ioc.proEdit.AddressEditor"/>
</map>
</property>
</bean>

<!-- spring发现address的类型是Address的时候,就会调用对应的属性编辑器处理AddressEditor了 -->
<bean id="student" class="com.briup.ioc.proEdit.Student">
<property name="id" value="1"/>
<property name="name" value="tom"/>
<property name="age" value="45"/>
<property name="gender" value="true"/>
<property name="address">
<value>kunshan,xueyuan,China</value>
</property>
</bean>

以上是关于SpringIOC自定义属性编辑器PropertyEditor的主要内容,如果未能解决你的问题,请参考以下文章

如何对实体的自定义属性进行谓词

如何使用 Q_PROPERTY 公开自定义对象列表

微信小程序——data-*自定义属性

HTML5 data-* 自定义属性

C# 如果在继承的栏位(Property)中判断是不是实现某接口的自定义属性(Attribute)的栏位?

自定义表格视图单元格中的可编辑文本字段