Spring中自定义属性编辑器 (一)

2014-11-24 09:49:30 · 作者: · 浏览: 0

Spring中的属性编辑器能够自动的将String类型转化成需要的类型,例如一个类里面的一个整型属性,在配置文件中我们是通过String类型的数字进行配置的,这个过程中就需要一个转化操作,当然这个转化操作是由Spring来帮我们完成的,就是通过属性编辑器来操作的。

Spring具有多个自定义编辑器,它们能够自动把注入的String值转化为更复杂的类型

ClassEditor:能够实现将一个String值转化为java.lang.Class,其中String值包括一个完整的类名描述

CustomDateEditor:将一个String值转化为java.util.Date,其中String是使用的自定义的DateFormat对象

FileEditor:从一个String值设置java.io.File属性,String值中包含文件的路径

LocalEditor:从一个String值设置java.util.Locale,String值里面包含地域的文本信息

StringArrayPropertyEditor:把逗号分割的String转化为一个String数组属性

StringTrimmerEditor:对String属性进行自动裁剪,设置这个选项后,可以把空的String值转化为NULL

URLEditor:从一个String值设置为java.net.URL属性,String中包括一个URL

下面是一个自定义属性编辑器的例子


[java]
//一个普通的JavaBean
public class Person {
//人的名字
private String name;
private Phone phone;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Phone getPhone() {
return phone;
}
public void setPhone(Phone phone) {
this.phone = phone;
}
}

//一个普通的JavaBean
public class Person {
//人的名字
private String name;
private Phone phone;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Phone getPhone() {
return phone;
}
public void setPhone(Phone phone) {
this.phone = phone;
}
}

这个类里面有一个属性是电话,具体的定义如下:

[java]
//普通的PHONE类,也是一个JavaBean
public class Phone {
private String areaCode;
private String prefix;
private String number;
public Phone(String areaCode, String prefix, String number) {
super();
this.areaCode = areaCode;
this.prefix = prefix;
this.number = number;
}
public String getAreaCode() {
return areaCode;
}
public void setAreaCode(String areaCode) {
this.areaCode = areaCode;
}
public String getPrefix() {
return prefix;
}
public void setPrefix(String prefix) {
this.prefix = prefix;
}
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
}

//普通的PHONE类,也是一个JavaBean
public class Phone {
private String areaCode;
private String prefix;
private String number;
public Phone(String areaCode, String prefix, String number) {
super();
this.areaCode = areaCode;
this.prefix = prefix;
this.number = number;
}
public String getAreaCode() {
return areaCode;
}
public void setAreaCode(String areaCode) {
this.areaCode = areaCode;
}
public String getPrefix() {
return prefix;
}
public void setPrefix(String prefix) {
this.prefix = prefix;
}
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
}
对这个Phone生成一个字符串到Phone的转化类

[java]
public class PhoneEditor extends java.beans.PropertyEditorSupport{
@Override
public void setAsText(String text) throws IllegalArgumentException {
String stripped=stripNonNumeric(text);
String areaCode=stripped.substring(0,3);
String prefix=stripped.substring(3,6);
String number=stripped.substring(6);
Phone phone=new Phone(areaCode,prefix,number);
setValue(phone);
}
private String stripNonNumeric(String original){
StringBuffer allNumberic=new StringBuffer();
for(int i=0;i char c=original.charAt(i);
if(Character.isDigit(c)){
allNumberic.appen