java.beans.PropertyEditor与CustomEditorConfigurer

java.beans.PropertyEditor从名称看是属性编辑器,可用来将字符串值转换成指定类型的对象。有两个主要的方法:
void setValue(Object value);
void setAsText(String text);

一般不直接实现PropertyEditor接口,而是继承自PropertyEditor的一个实现类java.beans.PropertyEditorSupport简化工作,在子类覆盖setAsText方法是实现字符串到对象的转换工作,setValue方法一般不直接使用,在setAsText方法中将字符串进行转换并产生目标对象以后,由setAsText调用setValue来把目标对象注入到编辑器中。当然,你可用覆盖更多的方法来满足你的特殊要求。JavaBean的类和接口,被大部分spring包使用,可以从spring中学习更成熟的JavaBean使用方法。

示例分两部分,先演示PropertyEditor的简单实用,再演示Spring的org.springframework.beans.factory.config.CustomEditorConfigurer用法。

定义User.java类:
public class User {
	private String name;
	private int age;
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	
	@Override
	public String toString(){
		return name+" : "+age;
	}
}

User.java的属性编辑器类UserPropertyEditor.java:
import java.beans.PropertyEditorSupport;
public class UserPropertyEditor extends PropertyEditorSupport{
	
	@Override
	public void setAsText(String text){
		String[] sts = text.split(",");
		User user = new User();
		user.setName(sts[0]);
		user.setAge(Integer.parseInt(sts[1]));
		
		setValue(user);
	}
}

测试类:
public class PropertyEditorDemo {

	public static void main(String[] args) {
		UserPropertyEditor upe = new UserPropertyEditor();
		upe.setAsText("Ellison,60");
                  //getValue()方法返回setAsText方法转换的User实例
		System.out.println(upe.getValue());
	}
}

结果输出:Ellison : 60
=====================
org.springframework.beans.factory.config.CustomEditorConfigurer可以读取实现PropertyEditor接口的类,并按其中的实现将字符串转换成指定类型对象。
新建一个类HelloBean.java
public class HelloBean {
	private User user;
	
	public User getUser() {
		return user;
	}

	public void setUser(User user) {
		this.user = user;
	}
}

Bean定义文件config.xml:
<?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="helloBean" class="test.HelloBean">
 		<property name="user" value="Gosling,59" />
 	</bean>
   
   <bean id="editorConfig" class="org.springframework.beans.factory.config.CustomEditorConfigurer" >
   	  <property name="customEditors">
   	  	<map>
   	  	    <entry key="test.User">
   	  		<bean class="test.UserPropertyEditor"/>
   	  	    </entry>
   	  	</map>
   	  </property>
   </bean>
   
</beans> 

CustomEditorConfigurer的属性customEditors是Map类型,Map的key表示遇到哪一个类型时要使用PropertyEditor,value表示对应要使用的PropertyEditor实现类。

测试类:
public class PropertyEditorDemo {
	public static void main(String[] args) {
		ApplicationContext ctx = new ClassPathXmlApplicationContext("test/config.xml");
		HelloBean hb = (HelloBean)ctx.getBean("helloBean");
		System.out.println(hb.getUser());
	}
}

结果输出:Gosling : 59

你可能感兴趣的:(java,spring,工作,bean,xml)