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
原文:https://www.cnblogs.com/Magic-Li/p/11723388.html