定制属性解析器
1、JavaBean的接口java.beans.PropertyEditor提供将字符串映射成非String类型的方法(其直接实现类为PropertyEditorSupport):
1)、getText( ):返回一个属性值的字符串
2)、setAsText(String text):将传递进来的字符串赋给Bean的属性
2、Spring提供了几个建立在PropertyEditorSupport之上的定制编译器:
1)URLEditor:将字符串与java.net.URL 相互转换
2)ClassEditor:使用包含全称类名的字符串设置java.lang.Class属性
3)CustomDateEditor:使用某种java.text.DateFormat对象将字符串设置给java.util.Date属性
4)FileEditor:使用包含文件路径的字符串设置java.io.File属性
5)LocalEditor:使用包含地域性息(如:en_US)的字符串设置java.util.Local属性
6)StringArrayPropertyEditor:将一个包含逗号的String转换成String数组属性
7)StringTrimmerEditor:自动修正字符串属性,可选择将字符串转变成null
3案例分析:
cn.csdn.service. AddressServiceImpl
package cn.csdn.service;
public class AddressServiceImpl {
private String address;
private String code;
private String tel;
省略了set和get方法…
}
cn.csdn.service. EmpServiceImpl
package cn.csdn.service;
public class EmpServiceImpl {
/** 姓名 */
private String name;
/** 职位 */
private String title;
/** 家庭住址 */
private AddressServiceImpl homeAddress;
/** 公司地址 */
private AddressServiceImpl companyAddress;
省略了set和get方法…
}
cn.csdn.editer. AddressEditer
package cn.csdn.editer;
import java.beans.PropertyEditorSupport;
import cn.csdn.service.AddressServiceImpl;
public class AddressEditer extends PropertyEditorSupport{
@Override
public void setAsText(String text) throws IllegalArgumentException {
if(text!=null&&!text.trim().equals("")){
System.out.println(text);
String str[]=text.split("-");
if(str.length>2){
AddressServiceImpl asi=new AddressServiceImpl();
asi.setAddress(str[0]);
asi.setCode(str[1]);
asi.setTel(str[2]);
setValue(asi);
}
}
setValue(null);
}
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
<!-- 定义一个自定义编译器 -->
<bean id="customEditorConfigurer" class="org.springframework.beans.factory.config.CustomEditorConfigurer">
<property name="customEditors">
<map>
<entry key="cn.csdn.service.AddressServiceImpl">
<bean class="cn.csdn.editer.AddressEditer"></bean>
</entry>
</map>
</property>
</bean>
<bean id="empServiceImpl" class="cn.csdn.service.EmpServiceImpl" scope="singleton">
<property name="name"><value>kouxiaolin</value></property>
<property name="title"><value>student</value></property>
<!—一般写法-->
<property name="homeAddress">
<bean class="cn.csdn.service.AddressServiceImpl">
<property name="address"><value>保定</value></property>
<property name="code"><value>071000</value></property>
<property name="tel"><value>15530232157</value></property>
</bean>
</property>
<!-- 采用 自定义的属性编译器解析-->
<property name="companyAddress">
<value>衡水-073000-15530232157</value>
</property>
</bean>
</beans>