spring笔记-PropertyEditor
2018-12-23 本文已影响12人
兴浩
1.PropertyEditor接口
A PropertyEditor class provides support for GUIs that want to allow users to edit a property value of a given type.
简单说就是字符串和其他对象的类型转换器,通过setAsText设置,再通过getValue获取转换值
@Test
public void testStandardURI() throws Exception {
PropertyEditor urlEditor = new URLEditor();
urlEditor.setAsText("mailto:juergen.hoeller@interface21.com");
Object value = urlEditor.getValue();
assertTrue(value instanceof URL);
URL url = (URL) value;
assertEquals(url.toExternalForm(), urlEditor.getAsText());
}
2.PropertyEditorRegistry
PropertyEditor注册器,用户为某类型注册PropertyEditor,PropertyEditorRegistrySupport是其默认实现类
@Test
public void test1()
{
PropertyEditorRegistrySupport registrySupport=new PropertyEditorRegistrySupport();
registrySupport.registerCustomEditor(String.class, "name", new PropertyEditorSupport() {
@Override
public void setAsText(String text) throws IllegalArgumentException {
setValue("prefix" + text);
}
});
PropertyEditor propertyEditor=registrySupport.findCustomEditor(String.class, "name");
}
3.BeanWrapper和PropertyEditor
BeanWrapper继承自PropertyEditorRegistrySupport
通过注册registerCustomEditor方法注册PropertyEditor,在调用setPropertyValue时会调用PropertyEditor的setAsText方法
@Test
public void testCustomEditorForSingleProperty() {
TestBean tb = new TestBean();
BeanWrapper bw = new BeanWrapperImpl(tb);
bw.registerCustomEditor(String.class, "name", new PropertyEditorSupport() {
@Override
public void setAsText(String text) throws IllegalArgumentException {
setValue("prefix" + text);
}
});
bw.setPropertyValue("name", "value");
bw.setPropertyValue("touchy", "value");
assertEquals("prefixvalue", bw.getPropertyValue("name"));
assertEquals("prefixvalue", tb.getName());
assertEquals("value", bw.getPropertyValue("touchy"));
assertEquals("value", tb.getTouchy());
}
4.TypeConverter
TypeConverter简化为一个方法进行值转换,TypeConverterSupport内部使用TypeConverterDelegate实现转换,TypeConverterDelegate内部则依赖PropertyEditorRegistrySupport,所以依赖路径为
TypeConverter->TypeConverterSupport->TypeConverterDelegate->PropertyEditorRegistrySupport->PropertyEditor
@Test
public void test1()
{
SimpleTypeConverter converter=new SimpleTypeConverter();
URL url=converter.convertIfNecessary("http://www.springframework.org",URL.class);
System.out.println(url.toString());
}