在Spring配置文件中,经常使用这样的配置
public Class Boss {
private String name;
private int age;
private Car car;
//getter,setter
}
public class Car {
private String brand;
private String color;
private String maxSpeed;
private Integer weight;
//getter,setter
}
<bean class="main.java.com.sxd.domain.Boss" name="boss">
<property name="name" value="Shixiaodong"/>
<property name="age" value="22"/>
<property name="car" value="BMW,Black,200m/s,2000"/>
</bean>
不论什么值都是用value来表时,那么在内部一定有相关的转换的工具将String转为和属性相同类型的值
1. PropertyEditor
2. PropertyEditorSupport
继承关系
3. 自定义属性编辑器
public class CustomCarEditor extends PropertyEditorSupport {
@Override
public void setAsText(String text) throws IllegalArgumentException {
if(text == null) {
throw new IllegalArgumentException("设置的字符串格式不正确.");
}
String[] infos = text.split(",");
Car car = new Car();
car.setBrand(infos[0]);
car.setColor(infos[1]);
car.setMaxSpeed(infos[2]);
car.setWeight(Integer.parseInt(infos[3]));
//将Car转化为属性的值
setValue(car);
}
}
4.1注册属性编辑器
XML配置编辑器,ApplicationContext已经注册CustomEditor,而BeanFactory需要手动注册BeanFactory的后置处理器CustomEditorConfigurer
<bean class="org.springframework.beans.factory.config.CustomEditorConfigurer">
<property name="customEditors">
<map>
<!--Car属性由CustomeCarEditor处理-->
<entry key="main.java.com.sxd.domain.Car" value="main.java.com.sxd.domain.CustomCarEditor"></entry>
</map>
</property>
</bean>
4.2 精通Spring4.x企业应用开发实战中P192提到
在和Bean相同的包下只需要存在{BeanName}Editor会被自动扫描到
5.Debug测试(出栈顺序)
XML配置的属性进入
editor=CustomCarEditor
获取到属性,准备将值给合适的编辑器转化
查找编辑器
Ps:例子来自:精通Spring4.x企业应用开发实战
很喜欢Intellij IDEA的debug,功能很强大,Spring的IoC和AOP看一段的时间了,只是会用一点简单的基础的功能,也试试看看读一读源码,虽然做不到细致入微,但是给自己的要求是只要理解每个接口,方法的大致作用,以及对类/接口的继承体系有一个大体的认知,(StarUML,Xmind,MyBase)。