1、通过继承JDK 中的 java.beans.PropertyEditorSupport 类来实现自己的编辑器类 ,该类用于实现将String 类型转换成您需要的数据类型。然后我们只需要在Spring 的容器中对这个编辑器进行有效的“注册”便可以实现Spring 在装配Bean 时自动的将String 类型转换成我们自定义的类型。

如何编辑自己的PropertyEditor,其实需要了解一点java.beans包的知识,在该包中,有一个 java.beans.PropertyEditor的接口,它定义了一套接口方法(12个),即通过这些方法如何将一个String变成内部的一个对 象,这两个方法是比较重要的: 
     a)setValue(Object value) 直接设置一个对象
     b)setAsText(String text) 通过一个字符串来构造对象,一般在此方法中解析字符串,将构造一个类对象,调用setValue(Object)来完成属性对象设置操作。 
  
  2)实现所有的接口方法是麻烦的,java.beans.PropertyEditorSupport 适时登场,一般情况下,我们通过扩展这个方便类即可。

2、CustomEditorConfigurer 类 用于实现在Spring 中注册自己定义的编辑器 。它是Spring 当中一个非常有用的工厂后处理类(工厂后处理通过Spring 的BeanFactoryPostProcessor 接口实现, 它是在Spring 容器启动并初始化之后进行对Spring 容器的操作类)。在Spring 中已经注册了不少编辑器类,他们都用于String 类型转换为其他的数据类型,如URL,Date等。

配置CustomEditorConfigurer 类:

CustomEditorConfigurer 类中有一个customEditor属性,它是一个Map 类型。通过配置它便实现了自定义的编辑器注册。这个Map 的键值对对应着转换类型和编辑器(转换类型是Key,编辑器是Value)。

自定义编辑器可以简化Spring 的装配Bean。使其更加的简单。不容易发生配置错误。 PS:如果使用Spring 的ApplicationContext容器,那么只需在Spring 的配置文件中进行简单的装配,而对于Bean 工厂可能需要手动的注册才能使用。

Java代码  
  1. //User.java
  2. public class User {
  3. private String name;
  4. private int age;
  5. 。。。
  6. }
Java代码  
  1. //用到User的类:UserContainer.java
  2. public class UserContainer {
  3. private User user;
  4. public void setUser(User user) {
  5. this.user = user;
  6. }
  7. public void printUser() {
  8. System.out.println(user.getName() + " " + user.getAge());
  9. }
  10. }
Java代码  
  1. //将配置中的转换的类:TransformUser.java
  2. public class TransformUser extends PropertyEditorSupport {
  3. public void setAsText(String text) {
  4. String[] data = text.split(",");
  5. User user = new User();
  6. user.setName(data[0]);
  7. user.setAge(Integer.parseInt(data[1]));
  8. this.setValue(user);
  9. }
  10. }
Java代码  
  1. 在applicationContext.xml文件中。
  2. <bean id="user" class="User" />
  3. <bean id="transformUser" class="TransformUser"/>
  4. <bean id="userContainer" class="UserContainer">
  5. <property name="user" value="liming,23"></property>
  6. </bean>
  7. <bean id="configBean"   class="org.springframework.beans.factory.config.CustomEditorConfigurer">
  8. <property name="customEditors">
  9. <map>
  10. <entry key="User">  <!-- 属性类型 -->
  11. <bean class="TransformUser"/>  <!--对应Address的编辑器 -->
  12. </entry>
  13. </map>
  14. </property>
  15. </bean>
  16. 将liming,23这种格式的转换成User类。

例子1:http://www.iteye.com/topic/24660

例子2:http://gundumw100.iteye.com/blog/574440

转载于:https://www.cnblogs.com/chenying99/archive/2012/05/16/2505397.html

Spring自定义属性编辑器PropertyEditorSupport + 使用CustomEditorConfigurer注册属性编辑器...相关推荐

  1. 【Spring 基础篇三】属性注入与属性编辑器

         上篇我们了解了一下applicationContext.xml的两种注入方式,本篇我们来了解一下关于属性的注入以及操作.      在敲代码的过程中,我们很容易遇到这样的问题,比如一个Lis ...

  2. Spring - Java/J2EE Application Framework 应用框架 第 4 章 属性编辑器,数据绑定,校验与BeanWeapper(Bean封装)

    第 4 章 属性编辑器,数据绑定,校验与BeanWeapper(Bean封装) 4.1. 简介 是否需要对业务逻辑进行验证是一个常见的问题. 有关这一点存在两种截然想法的回答,Spring提出的验证模 ...

  3. 【Java基础】属性编辑器PropertyEditor

    在Spring配置文件里,我们往往通过字面值为Bean各种类型的属性提供设置值:不管是double类型还是int类型,在配置文件中都对应字符串类型的字面值.BeanWrapper填充Bean属性时如何 ...

  4. 如何实现自定义的属性编辑器

    1.自定义一个实现了PropertyRegisterSuppor接口的编辑器 2.让spring感知到自己定义的编辑器:自定义个一个属性编辑器的注册器,实现PropertyEditeRegister接 ...

  5. VCL (三) 属性编辑器

    Delphi的属性是一个很有特色的功能,这一特性在C#里得到了很好的继承. 对于一个类来说,属性是对类中的数据进行有效修改和访问的特殊接口.在VCL中,被published 的属性还有一个特性,就是可 ...

  6. 计算机注册表管理,如何打开计算机注册表编辑器

    如何打开计算机注册表编辑器?我们可以单击"开始-运行",或按住计算机左下角的Win键(Tianzi键)并同时按R键以打开运行窗口,在运行窗口中输入regedit,确定,打开注册表编 ...

  7. Spring自定义属性编辑器及原理解释.md

    bean的自动装配解释 手动解决方式 自动注入解决方式 bean的自动装配解释 之前有构造注入和设值注入,但是也是手动的 autowire ="byname" 这里要注意自动装配的 ...

  8. 【Spring】—-常用属性注入及属性编辑器(三)

    对于对象的注入,我们使用ref方式,可以指定注入的对象,下面看下属性的注入,以及当spring无法转换基本类型进行注入时,如何编写一个类似转换器的东西来完成注入. [属性注入] 常见属性的注入:int ...

  9. Spring——自定义属性编辑器+Bean的生存范围+Bean的生命周期

    一.自定义属性编辑器(一个类): 步骤: 1.写一个类,这个类继承PropertyEditorSupport. 2.重写setAsText()方法. 3.在bean.xml文件中添加属性编辑器的bea ...

最新文章

  1. IOS反汇编工具Hopper分析Crash Log
  2. 文本超出显示省略号/数字英文字母折行有关css 属性/显示两行,第二行省略号显示css方法...
  3. flask_restplus的fields中怎么定义字典_Quora | 成功的定义是什么?
  4. Java ResultSet如何检查是否有任何结果
  5. cve-2019-1821 思科 Cisco Prime 企业局域网管理器 远程代码执行 漏洞分析
  6. 移动应用开发必备工具盘点
  7. Spring - 父容器与子容器
  8. kibana操作elasticsearch:创建映射字段
  9. python窗口化编程_python程序的窗口化
  10. js如何设置浏览器全屏效果?
  11. [Tools 之]online bookmark 在线书签
  12. Github上点赞最多的10个Python项目(2020年3月)
  13. 微软 CTO 韦青:5G 与亚里士多德
  14. 更换jdk版本_滴滴夜莺发布 v3 版本,从运维监控演化成了运维平台
  15. python2.3嵌套if结构:
  16. chown: 无效的用户: hadoop-3.1.4_Ubuntu 21.04 用户主目录权限将14年来首次变更及新功能预览...
  17. golang:goredis库pipeline使用方式
  18. docker--镜像
  19. iOS 11 发布!巨大进步、里程碑式飞跃!
  20. 黑白照片怎么上色?学会这招轻松解决

热门文章

  1. JBoss日志文件配置
  2. 互联网工作原理(17.网络电视是如何工作的)
  3. leetcode算法题--Magical String
  4. acwing算法题--完全背包问题
  5. flannel源码分析--WatchLeases
  6. 沙溪理工学校计算机,学雷锋树新风——沙溪理工学校计算机部开展学雷锋活动...
  7. ubuntu下eclipse的svn插件使用javahl
  8. who,cut,diff,which,whereis,locate,updatedb 命令的使用
  9. DatagridView内容自动换行和换行符换行
  10. JS调用PageOffice接口,删除Word表格中光标所在行