<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[Heck's  Blog]]></title> 
<link>https://www.heckjj.com/index.php</link> 
<description><![CDATA[一瞬间的决定，往往可以改变很多，事实上，让自己成功的往往不是知识，是精神！ 如果你总是为自己找借口，那只好让成功推迟。执行力，今天！]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[Heck's  Blog]]></copyright>
<item>
<link>https://www.heckjj.com/post//</link>
<title><![CDATA[如何在spring中自定义属性编辑器CustomEditorConfigurer]]></title> 
<author>Heck &lt;@hecks.tk&gt;</author>
<category><![CDATA[编程杂谈]]></category>
<pubDate>Thu, 27 Mar 2014 16:45:18 +0000</pubDate> 
<guid>https://www.heckjj.com/post//</guid> 
<description>
<![CDATA[ 
	首先我们看下什么是属性编辑器，到底它有什么作用呢？ <br/> * 自定义属性编辑器，spring配置文件中的字符串转换成相应的对象进行注入<br/> spring已经有内置的属性编辑器，我们可以根据需求自己定义属性编辑器<br/><br/> * 如何定义属性编辑器？<br/>&nbsp;&nbsp;* 继承PropertyEditorSupport类，覆写setAsText()方法（注意要将处理完成的对象通过PropertyEditorSupport的setValue设置回去）<br/> *向IoC容器中注册自定义的属性编辑器(两种方式：1 在配置文件中注册 2 在程序中注册)<br/>接下来我们就看看一个关于日期的属性编辑器的部署过程：<br/>首先定义一个测试类：<br/><br/>比如： <br/>有一个类里面有一个Date属性<br/>package tk.hecks.property;<br/><br/>import java.util.Date;<br/><br/>public class User &#123;<br/>&nbsp;&nbsp;private String username;<br/>&nbsp;&nbsp;private <span style="color: #FF0000;">Date birthday;</span><br/>&nbsp;&nbsp;public String getUsername() &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;return username;<br/>&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;public void setUsername(String username) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;this.username = username;<br/>&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;public Date getBirthday() &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;return birthday;<br/>&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;public void setBirthday(Date birthday) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;this.birthday = birthday;<br/>&nbsp;&nbsp;&#125;<br/><br/>&#125;<br/><br/><br/>然后继承PropertyEditorSupport,实现自定义的属性编辑器，UtilDatePropertyEditor.java 如下，必须继承java.beans.PropertyEditorSupport类，覆写setAsText()方法，再将处理完的对象setValue回去。<br/><br/>package tk.hecks.property;&nbsp;&nbsp;<br/>import java.beans.PropertyEditorSupport;&nbsp;&nbsp;<br/>import java.util.Date;&nbsp;&nbsp;<br/>import java.text.ParseException;&nbsp;&nbsp;<br/>import java.text.SimpleDateFormat;&nbsp;&nbsp;<br/>public class UtilDatePropertyEditor extends PropertyEditorSupport&#123;&nbsp;&nbsp;<br/><br/> private String format;&nbsp;&nbsp;<br/> public UtilDatePropertyEditor(String format) &#123;&nbsp;&nbsp;<br/>&nbsp;&nbsp;this.format=format;&nbsp;&nbsp;<br/> &#125;&nbsp;&nbsp;<br/><br/> public void setAsText(String text) throws IllegalArgumentException &#123;&nbsp;&nbsp;<br/>&nbsp;&nbsp;SimpleDateFormat sdf=new SimpleDateFormat(format);&nbsp;&nbsp;<br/>&nbsp;&nbsp;try &#123;&nbsp;&nbsp;<br/>&nbsp;&nbsp; Date date=sdf.parse(text);&nbsp;&nbsp;<br/>&nbsp;&nbsp; this.setValue(date);&nbsp;&nbsp;<br/>&nbsp;&nbsp;&#125; catch (ParseException e) &#123;&nbsp;&nbsp;<br/>&nbsp;&nbsp; System.out.println(e.getMessage()+&quot;日期的格式不对&quot;);&nbsp;&nbsp;<br/>&nbsp;&nbsp;&#125;&nbsp;&nbsp;<br/> &#125;&nbsp;&nbsp;<br/><br/> public void setFormat(String format) &#123;&nbsp;&nbsp;<br/>&nbsp;&nbsp;this.format = format;&nbsp;&nbsp;<br/> &#125;&nbsp;&nbsp;<br/>&nbsp;&nbsp; <br/>&#125;&nbsp;&nbsp;<br/><br/><br/>接着我们首先定义配置文件：(采用配置方式)<br/>applicationContext.xml配置文件如下：<br/>&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&nbsp;&nbsp;<br/> &lt;beans xmlns=&quot;http://www.springframework.org/schema/beans&quot;&nbsp;&nbsp; <br/> xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;&nbsp;&nbsp; <br/> xsi:schemaLocation=&quot;http://www.springframework.org/schema/beans&nbsp;&nbsp; <br/> http://www.springframework.org/schema/beans/spring-beans.xsd&nbsp;&nbsp;<br/>&quot;&gt;&nbsp;&nbsp;<br/>&lt;!--将user中的Date赋值2014-03-28，spring会认为2014-03-28是String，无法转换成Date，会报错！--&gt;<br/>&lt;bean id=&quot;user&quot; class=&quot;tk.hecks.property.User&quot;&gt;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&lt;property name=&quot;username&quot; value=&quot;heck&quot;/&gt;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&lt;property name=&quot;birthday&quot; value=&quot;2014-03-28&quot;/&gt;&nbsp;&nbsp;<br/>&lt;/bean&gt;&nbsp;&nbsp;<br/><br/>&lt;!-- 所以自定义的属性编辑器 --&gt;&nbsp;&nbsp;<br/>&lt;bean id=&quot;customEditorConfigurer&quot; class=&quot;org.springframework.beans.factory.config.CustomEditorConfigurer&quot;&gt;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;property name=&quot;customEditors&quot;&gt;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;map&gt;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;entry key=&quot;java.util.Date&quot;&gt;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;bean class=&quot;com.property.UtilDatePropertyEditor&quot;&gt;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;!--干脆把format也注入，灵活处理格式--&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;property name=&quot;format&quot; value=&quot;yyyy-MM-dd&quot;/&gt;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/bean&gt;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/entry&gt;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/map&gt;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/property&gt;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&lt;/bean&gt;&nbsp;&nbsp;<br/>&lt;/beans&gt;&nbsp;&nbsp;<br/><br/>这样就可以完成正确解析了，注意customEditors是Spring的类CustomEditorConfigurer提供的属性，是一个Map,里面存放的都是自定义的编辑器（customEditors），比如这里存放的是UtilDatePropertyEditor日期编辑器，看CustomEditorConfigurer源码就知道了。 <br/><br/>接下来我们测试一下： <br/>import org.springframework.beans.factory.BeanFactory;<br/>import org.springframework.context.support.ClassPathXmlApplicationContext;<br/><br/>import junit.framework.TestCase;<br/><br/>public class InjectionTest extends TestCase &#123;<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;private BeanFactory factory;<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;@Override<br/>&nbsp;&nbsp;protected void setUp() throws Exception &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;factory = new ClassPathXmlApplicationContext(&quot;applicationContext.xml&quot;);&nbsp;&nbsp;<br/>&nbsp;&nbsp;&#125;<br/><br/>&nbsp;&nbsp;public void testInjection1() &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;User user= (User)factory.getBean(&quot;user&quot;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(&quot;name:&quot;+user.getUsername()+&quot;&#92;nbirthday:&quot;+user.getBirthday()); <br/>&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;<br/>&#125;<br/><br/>或者用main方法来测试<br/><br/>package tk.hecks.property;&nbsp;&nbsp;<br/>&nbsp;&nbsp;<br/>import org.springframework.beans.factory.config.ConfigurableBeanFactory;&nbsp;&nbsp;<br/>import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;&nbsp;&nbsp;<br/>import org.springframework.beans.factory.config.CustomEditorConfigurer;&nbsp;&nbsp;<br/>import org.springframework.beans.factory.xml.XmlBeanFactory;&nbsp;&nbsp;<br/>import org.springframework.context.ApplicationContext;&nbsp;&nbsp;<br/>import org.springframework.context.support.ClassPathXmlApplicationContext;&nbsp;&nbsp;<br/>import org.springframework.core.io.ClassPathResource;&nbsp;&nbsp;<br/>&nbsp;&nbsp;<br/>public class TestPropertyEditor &#123;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;public static void main(String[] args) &#123;&nbsp;&nbsp;<br/>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ApplicationContext ac=new ClassPathXmlApplicationContext(&quot;applicationContext-*.xml&quot;);&nbsp;&nbsp;<br/>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;User user=(User)ac.getBean(&quot;user&quot;);&nbsp;&nbsp;<br/>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(&quot;name:&quot;+user.getUsername()+&quot;&#92;nbirthday:&quot;+user.getBirthday());&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//它等价于&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ConfigurableBeanFactory beanFactory=new XmlBeanFactory(new ClassPathResource(&quot;applicationContext-beans.xml&quot;));&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CustomEditorConfigurer configurer=(CustomEditorConfigurer)beanFactory.getBean(&quot;customEditorConfigurer&quot;);&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;configurer.postProcessBeanFactory((ConfigurableListableBeanFactory) beanFactory);&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;User user=(User)beanFactory.getBean(&quot;user&quot;);&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(&quot;name:&quot;+user.getUsername()+&quot;&#92;nbirthday:&quot;+user.getBirthday());&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;&nbsp;&nbsp;<br/>&nbsp;&nbsp;<br/>&#125; <br/><br/>输出结果：<br/>name:heck&nbsp;&nbsp;<br/>birthday:Fri Mar 28 00:00:00 CDT 2014&nbsp;&nbsp;<br/><br/>接下来我们在程序中注册自定义的属性编辑器：<br/>package tk.hecks.property;&nbsp;&nbsp;<br/>&nbsp;&nbsp;<br/>import org.springframework.beans.PropertyEditorRegistrar;&nbsp;&nbsp;<br/>import org.springframework.beans.PropertyEditorRegistry;&nbsp;&nbsp;<br/>import org.springframework.beans.factory.config.ConfigurableBeanFactory;&nbsp;&nbsp;<br/>import org.springframework.beans.factory.xml.XmlBeanFactory;&nbsp;&nbsp;<br/>import org.springframework.core.io.ClassPathResource;&nbsp;&nbsp;<br/>&nbsp;&nbsp;<br/>public class TestPropertyEditorResgister &#123;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;public static void main(String[] args) &#123;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ConfigurableBeanFactory beanFactory=new XmlBeanFactory(new ClassPathResource(&quot;applicationContext.xml&quot;));&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;beanFactory.addPropertyEditorRegistrar(new PropertyEditorRegistrar() &#123;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public void registerCustomEditors(PropertyEditorRegistry registry) &#123;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;registry.registerCustomEditor(java.util.Date.class, new UtilDatePropertyEditor(&quot;yyyy-MM-dd&quot;));&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;);&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;User user=(User)beanFactory.getBean(&quot;user&quot;);&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(&quot;name:&quot;+user.getUsername()+&quot;&#92;nbirthday:&quot;+user.getBirthday());&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;&nbsp;&nbsp;<br/>&nbsp;&nbsp;<br/>&#125;&nbsp;&nbsp;<br/>Tags - <a href="https://www.heckjj.com/tags/spring%25E4%25B8%25AD%25E8%2587%25AA%25E5%25AE%259A%25E4%25B9%2589%25E5%25B1%259E%25E6%2580%25A7%25E7%25BC%2596%25E8%25BE%2591%25E5%2599%25A8customeditorconfigurer/" rel="tag">spring中自定义属性编辑器customeditorconfigurer</a>
]]>
</description>
</item><item>
<link>https://www.heckjj.com/post//#blogcomment</link>
<title><![CDATA[[评论] 如何在spring中自定义属性编辑器CustomEditorConfigurer]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>https://www.heckjj.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>