在Spring框架中,提供了几个内置的属性编辑器,如FileEditor,ResourceEditor等。要想使用自定义属性编辑器,需要经过两个步骤。
一。定义一个自定义编辑器,可实现PropertyEditor接口或直接继承PropertyEditorSupport类。
package com.dream.editor; import com.dream.model.photo.Photo; import com.dream.service.standard.PhotoService; import java.beans.PropertyEditorSupport; /** * Created by IntelliJ IDEA. * User: Zhong Gang * Date: 11-9-6 * Time: 下午10:10 */ public class PhotoEditor extends PropertyEditorSupport { private PhotoService photoService; @Override public String getAsText() { Photo photo = (Photo) getValue(); return photo.getGuid(); } @Override public void setAsText(String text) throws IllegalArgumentException { Photo photo = photoService.loadPhotoByGuid(text); setValue(photo); } }
二。注册自定义编辑器
Spring提供了一个PropertyEditorRegistry接口和PropertyEditorRegistrySupport类来自定义一个注册器。其中PropertyEditorRegistrySupport是Spring提供的一个默认实现,里面注册了一些内置的编辑器。
可以在配置文件中注册自定义编辑器,也可以以编程的方式注册自定义编辑器。
String location = "testApplicationContext.xml"; Resource resource = new ClassPathResource(location); XmlBeanFactory beanFactory = new XmlBeanFactory(resource); beanFactory.registerCustomEditor(Photo.class, PhotoEditor.class);
<bean id="customEditorConfigurer" class="org.springframework.beans.factory.config.CustomEditorConfigurer"> <property name="customEditors"> <map> <entry key="com.dream.model.photo.Photo"> <ref bean="photoEditor"/> </entry> </map> </property> </bean> <bean id="photoEditor" class="com.dream.editor.PhotoEditor"> <property name="photoService" ref="photoService"/> </bean>