文档章节

Spring自定义属性编辑器PropertyEditorSupport + 使用CustomEditorConfigurer注册属性编辑器

拷贝忍者卡卡习
 拷贝忍者卡卡习
发布于 2017/01/03 09:08
字数 720
阅读 67
收藏 0

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代码 

//User.java  
  
public class User {  
   private String name;  
   private int age;  
   ...
}  

 

Java代码 

//用到User的类:UserContainer.java  
  
public class UserContainer {  
  
private User user;  
  
public void setUser(User user) {  
   this.user = user;  
}  
  
public void printUser() {  
   System.out.println(user.getName() + " " + user.getAge());  
}  
}  

 

Java代码

//将配置中的转换的类:TransformUser.java  
public class TransformUser extends PropertyEditorSupport {  
  
 public void setAsText(String text) {  
    String[] data = text.split(",");  
    User user = new User();  
    user.setName(data[0]);  
    user.setAge(Integer.parseInt(data[1]));  
    this.setValue(user);  
  }  
}  

Java代码 

在applicationContext.xml文件中。  

  
<bean id="user" class="User" />  
<bean id="transformUser" class="TransformUser"/>  
  
<bean id="userContainer" class="UserContainer">  
     <property name="user" value="liming,23"></property>  
</bean>  
  
<bean id="configBean"   class="org.springframework.beans.factory.config.CustomEditorConfigurer">  
   <property name="customEditors">  
    <map>  
       <entry key="User">  <!-- 属性类型 -->    
             <bean class="TransformUser"/>  <!--对应Address的编辑器 -->    
       </entry>  
    </map>  
   </property>  
</bean> 

 

将liming,23这种格式的转换成User类。  

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

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

本文转载自:http://uule.iteye.com/blog/869060

拷贝忍者卡卡习
粉丝 9
博文 39
码字总数 24335
作品 0
深圳
程序员
私信 提问
学习spring必须java基础知识-PropertyEditor

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

lvzjane
2013/08/23
452
1
说说 Spring 的属性编辑器

在 Spring 配置文件中,我们往往通过字面值设置 Bean 各种类型的属性值 ,这个功能是通过属性编辑器实现的。 任何实现了 java.beans.PropertyEditor 接口的类都是属性编辑器 。 它可以将外部...

deniro
2018/05/18
0
0
Spring 4.2 Bean操作和BeanWrapper

BeanWrapper的工作方式在一定程度上是由它的名字表示:它包装一个Bean在其上执行动作,例如设置和检索属性。 在beans包中的一个很重要的类是BeanWrapper接口和它响应的实现(BeanWrapperImpl...

Leech
2015/08/09
0
0
SpringMVC的@InitBinder注解使用

@InitBinder用于在@Controller中标注于方法,表示为当前控制器注册一个属性编辑器或者其他,只对当前的Controller有效。在使用SpringMVC的时候,经常会遇到表单中的日期字符串和JavaBean的D...

兴趣e族
2017/04/26
0
0
Spring常用的接口和类(转)

一、ApplicationContextAware接口 当一个类需要获取ApplicationContext实例时,可以让该类实现ApplicationContextAware接口。代码展示如下: public class Animal implements ApplicationCo...

mifans
2016/11/07
47
0

没有更多内容

加载失败,请刷新页面

加载更多

关于谷歌浏览器崩溃,打不开任何界面

首先:谷歌浏览器右键打开属性,在箭头所指的位置复制粘贴 -no-sandbox。(需要空一格再写入 -no-sandbox) 其次:你打开谷歌浏览器可以看到如下提醒,提醒你,稳定性和安全性会有所下降,但...

Raphael98
18分钟前
2
0
java 删除文件夹下的文件

/** * 删除已经下载过的文件 * @param path * @return */ @ApiOperation(value = "删除已经下载过的Excel",httpMethod="",notes="") @GetMapping("/deleteExcel") public Object downLoad(@......

简小姐
18分钟前
3
0
如何安装GMP,MPFR,MPC,ELF,无需共享库?

如何使用当前版本, 使用正确版本的依赖关系,不使用包管理器(如yum,rpm,apt,dpkg)并且不使用共享库,来逐块安装GCC(GNU编译器集合)? 典型的开发人员可能希望以典型的方式安装GCC,使...

mskk
22分钟前
3
0
Rancher + VMware PKS实现全球数百站点的边缘K8S集群管理

Sovereign Systems是一家成立于2007年的技术咨询公司,帮助客户将传统数据中心技术和应用程序转换为更高效的、基于云的技术平台,以更好地应对业务挑战。曾连续3年提名CRN,并且在2012年到2...

RancherLabs
27分钟前
2
0
docker修改log-driver后启动失败问题解决

vi /etc/sysconfig/docker 去掉--log-driver=journald 重启docker,重新run一个容器

abowu
29分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部