Spring学习02--属性编辑器
来源:互联网 发布:网络战略游戏图片 编辑:程序博客网 时间:2024/06/10 11:27
1、属性编辑器
上面说道,Spring读取配置文件注入值的时候会调用属性编辑器,将value标签值转换成对象对应属性的类型值。那么,我们来自定义一个属性编辑器。
有一个类TradeAcco.java,有个成员变量是Date类型
private Date vc_date;
然后提供get/set方法(代码忽略)
然后配置文件如下配置:
<property name="vc_date" value="2016/12/13"></property>
这样问题来了,这个value值是个String类型,要以什么格式写呢,才能被注入到Date类型里面呢?
所以,我们来自定义一个Date类型的属性编辑器
新建一个类UtilDatePropertyEditor
/** * 自定义的日期属性编辑器 * @author Errol * */public class UtilDatePropertyEditor extends PropertyEditorSupport { @Override public void setAsText(String text) throws IllegalArgumentException { try { Date date = new SimpleDateFormat("yyyy/MM/dd").parse(text);//对配置的日期值进行转换成日期,根据格式 this.setValue(date);//将转换后的值放到对象属性中 } catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
里面注意到,改类继承了PropertyEditorSupport类,这个就是提供属性编辑器的支持类,重写其中一个方法setAsText()方法,我们的转换就是在这里面进行的。然后调用PropertyEditorSupport类的setValue()方法,将转换后的值设置进我们的成员变量当中。
这样就可以了吗?还不行,即使我们写好了编辑器的代码,但是Spring不知道,上面也说了,Spring将value值转换成目标类型依赖于属性编辑器的一个map,也就是说,我们接下里的工作要将自定义的属性编辑器,注入到这个map里面。
那么,这个map这哪里?CustomEditorConfigurer Spring依赖的属性编辑器就是这个类,这个类源码中有这么一个成员变量:
private PropertyEditorRegistrar[] propertyEditorRegistrars;private Map customEditors;
map出现了,对了,就是这个东西。我们要把我们自定义的类注入到这个Map里面。如何注入,又是注入,那就把Spring的这个类当作我们平时写的类来做好了,配置文件,写bean,写property,写map,其实就是这样:
<!-- 配置属性编辑器 ,可分文件配置--> <!-- 首先配置编辑器的类--> <bean id="utilDatePropertyEditor" class="com.errrol.util.UtilDatePropertyEditor"></bean> <!-- 这里进行配置编辑器 --> <bean id="customEditors" class="org.springframework.beans.factory.config.CustomEditorConfigurer"> <property name="customEditors"> <map> <entry key="java.util.Date" value-ref="utilDatePropertyEditor"> </entry> </map> </property> </bean>
里面配置了两个bean,其中一个是我们写好的Data属性编辑器,另一个是CustomEditorConfigurer类,意思是,往CustomEditorConfigurer类中的成员变量customEditors,这个map里面注入一对键值对,其中键值key=我们所需要转换的类型,那就是Date,value配置的是目标属性编辑器,也就是我们自己写的UtilDatePropertyEditor,用value-ref引用即可。
写好了之后,用jUnit测试方法测试一下,查看我们配置给Date类型的String值有没有被转换成Date类型注入给TradeAcco实例。
TradeAcco [vc_tradeacco=0001, vc_fundacco=980001, en_balance=1000000, en_share=888888.0, ls_manager=[S01, S02, S03, S04], mp_sharedetail={150001=1000, 250001=2000, 350001=3000}, st_fundcurrent=[S01123412, S02231412, S035767, S04213747], prop={1=}, vc_date=Tue Dec 13 00:00:00 CST 2016]
成功注入!
问题又来了,日期的格式我们已经写死了,我们要改的话,又要改配置文件,又要改代码,这实在不是Spring的风格,改进一下。
2、可配置的属性编辑器
其实修改也很简单,时刻想着注入就好,把上面自定义的编辑器中的格式作为一个成员变量,然后配置到配置文件中就好了,直接赋代码
/** * 自定义的日期属性编辑器 * @author Errol * */public class UtilDatePropertyEditor extends PropertyEditorSupport { private String reg; public String getReg() { return reg; } public void setReg(String reg) { this.reg = reg; } @Override public void setAsText(String text) throws IllegalArgumentException { try { Date date = new SimpleDateFormat(reg).parse(text);//对配置的日期值进行转换成日期,根据格式 this.setValue(date);//将转换后的值放到对象属性中 } catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); } }}
然后是配置文件
<!-- 这里进行配置编辑器 --> <bean id="customEditors" class="org.springframework.beans.factory.config.CustomEditorConfigurer"> <property name="customEditors"> <map> <entry key="java.util.Date" > <bean id="utilDatePropertyEditor" class="com.errrol.util.UtilDatePropertyEditor"> <property name="reg" value="yyyy/MM/dd"></property> </bean> </entry> </map> </property> </bean>
测试运行,搞定!
- Spring学习02--属性编辑器
- spring中的属性编辑器
- spring Date属性编辑器
- spring中的属性编辑器
- Spring属性编辑器
- spring中的属性编辑器
- Spring自定义属性编辑器
- Spring自定义属性编辑器
- spring中的属性编辑器
- spring自定义属性编辑器
- spring属性编辑器
- Spring自定义属性编辑器
- Spring属性编辑器
- Spring-----自定义属性编辑器
- spring属性编辑器
- spring属性编辑器
- Spring学习笔记(11)----自定义属性编辑器
- Spring学习笔记(11)----自定义属性编辑器
- Vmei day02第二天
- 使用opencv编写函数 删除二值图像中面积较小的连通区域
- HelloWorld项目分析
- java响应式
- 那些年踩过华为手机的坑——相同的代码不同的效果
- Spring学习02--属性编辑器
- 如何在 Ubuntu 中检查 CPU ,显卡,内存,硬盘的使用情况及温度等信息
- 进程的执行退出函数
- LeetCode 149 Max Points on a Line
- Unity中的贝塞尔曲线思路及实现
- Lwip ARP分析(2)
- 测试
- 深度学习框架Caffe源码解析
- POJ2217——Secretary