Spring中如何自定义一个属性编辑器呢?
下文笔者讲述Spring中自定义属性编辑器的方法及示例分享,如下所示
1.定义一个 Editor 继承 PropertyEditorSupport 重写其中的setAsText方法 2.定义一个 CustomPropertyEditorRegistrar 实现 registerCustomEditors , 将CustomExtend.class和CustomExtendPropertyEditor进行关联 3.使用 BeanFactoryPostProcessor 将 CustomPropertyEditorRegistrar 注册到BeanFactory中例:
Custom package com.jd.customEditor; public class Custom { private String cusId; private String cusTel; private CustomExtend customExtend; public String getCusId() { return cusId; } public void setCusId(String cusId) { this.cusId = cusId; } public String getCusTel() { return cusTel; } public void setCusTel(String cusTel) { this.cusTel = cusTel; } public CustomExtend getCustomExtend() { return customExtend; } public void setCustomExtend(CustomExtend customExtend) { this.customExtend = customExtend; } public String toString(){ return "Custom [cusId=" + cusId + ", cusTel=" + cusTel + ", customExtend=" + customExtend + "]"; } } CustomExtend package com.jd.customEditor; public class CustomExtend { private String name; private String email; private String hobby; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getHobby() { return hobby; } public void setHobby(String hobby) { this.hobby = hobby; } @Override public String toString() { return "CustomExtend{" + "name='" + name + '\'' + ", email='" + email + '\'' + ", hobby='" + hobby + '}'; } } CustomExtendPropertyEditor package com.jd.customEditor; import java.beans.PropertyEditorSupport; public class CustomExtendPropertyEditor extends PropertyEditorSupport { public void setAsText(String text) throws IllegalArgumentException { //使用下划线分割字符串 // 传入字符串格式:name_hobby_email String[] strs = text.split("_"); CustomExtend customExtend = new CustomExtend(); if(strs.length >0) { customExtend.setName(strs[0]); } if(strs.length >1) { customExtend.setHobby(strs[1]); } if(strs.length >2) { customExtend.setEmail(strs[2]); } setValue(customExtend); } } CustomPropertyEditorRegistrar package com.jd.customEditor; import org.springframework.beans.PropertyEditorRegistrar; public class CustomPropertyEditorRegistrar implements PropertyEditorRegistrar { public void registerCustomEditors(org.springframework.beans.PropertyEditorRegistry registry) { registry.registerCustomEditor(CustomExtend.class, new CustomExtendPropertyEditor()); } } MyBeanFactoryPostProcess package com.jd.customEditor; import org.springframework.beans.BeansException; import org.springframework.beans.factory.config.BeanFactoryPostProcessor; import org.springframework.beans.factory.config.ConfigurablelistableBeanFactory; public class MyBeanFactoryPostProcess implements BeanFactoryPostProcessor { @Override public void postProcessBeanFactory(ConfigurableListableBeanFactory configurableListableBeanFactory) throws BeansException { configurableListableBeanFactory.addPropertyEditorRegistrar(new CustomPropertyEditorRegistrar()); } } customEditor.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.xsd"> <bean id="custom" class="com.jd.customEditor.Custom" > <property name="cusId" value="1" /> <property name="cusTel" value="123456789" /> <property name="customExtend" value="11_" /> </bean> <bean class="com.jd.customEditor.MyBeanFactoryPostProcess" name="myBeanFactoryPostProcess" > </bean> </beans>运行效果
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。