Spring中的属性编辑器能够自动的将String类型转化成需要的类型,例如一个类里面的一个整型属性,在配置文件中我们是通过String类型的数字进行配置的,这个过程中就需要一个转化操作,当然这个转化操作是由Spring来帮我们完成的,就是通过属性编辑器来操作的。

Spring具有多个自定义编辑器,它们能够自动把注入的String值转化为更复杂的类型

ClassEditor:能够实现将一个String值转化为java.lang.Class,其中String值包括一个完整的类名描述

CustomDateEditor:将一个String值转化为java.util.Date,其中String是使用的自定义的DateFormat对象

FileEditor:从一个String值设置java.io.File属性,String值中包含文件的路径

LocalEditor:从一个String值设置java.util.Locale,String值里面包含地域的文本信息

StringArrayPropertyEditor:把逗号分割的String转化为一个String数组属性

StringTrimmerEditor:对String属性进行自动裁剪,设置这个选项后,可以把空的String值转化为NULL

URLEditor:从一个String值设置为java.net.URL属性,String中包括一个URL

下面是一个自定义属性编辑器的例子

//一个普通的JavaBean
public class Person {
//人的名字
private String name;
private Phone phone;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Phone getPhone() {
return phone;
}
public void setPhone(Phone phone) {
this.phone = phone;
}
}

这个类里面有一个属性是电话,具体的定义如下:

//普通的PHONE类,也是一个JavaBean
public class Phone {
private String areaCode;
private String prefix;
private String number;
public Phone(String areaCode, String prefix, String number) {
super();
this.areaCode = areaCode;
this.prefix = prefix;
this.number = number;
}
public String getAreaCode() {
return areaCode;
}
public void setAreaCode(String areaCode) {
this.areaCode = areaCode;
}
public String getPrefix() {
return prefix;
}
public void setPrefix(String prefix) {
this.prefix = prefix;
}
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
}

对这个Phone生成一个字符串到Phone的转化类

public class PhoneEditor extends java.beans.PropertyEditorSupport{
@Override
public void setAsText(String text) throws IllegalArgumentException {
String stripped=stripNonNumeric(text);
String areaCode=stripped.substring(0,3);
String prefix=stripped.substring(3,6);
String number=stripped.substring(6);
Phone phone=new Phone(areaCode,prefix,number);
setValue(phone);
}
private String stripNonNumeric(String original){
StringBuffer allNumberic=new StringBuffer();
for(int i=0;i<original.length();i++){
char c=original.charAt(i);
if(Character.isDigit(c)){
allNumberic.append(c);
}
}
return allNumberic.toString();
}
}

配置文件如下:

<!-- 这里配置了自定义属性编辑器,Bean工厂在创建完后会自动将其注入 -->
<bean class="org.springframework.beans.factory.config.CustomEditorConfigurer">
<property name="CustomEditors">
<map>
<entry key="com.pp.Phone">
<bean id="phoneEditor" class="com.pp.PhoneEditor"></bean>
</entry>
</map>
</property>
</bean>
<bean id="test" class="com.pp.Person">
<property name="Name" value="ppTest"></property>
<!-- 在这里生成Bean对象时,会自动的将字符串转化成一个类 -->
<property name="Phone" value="888-555-1213"></property>
</bean>

测试文件如下:

		BeanFactory factory=new XmlBeanFactory(new ClassPathResource("person.xml"));
Person person=(Person)factory.getBean("test");
System.out.println(person.getName());
System.out.println(person.getPhone().getAreaCode());
System.out.println(person.getPhone().getPrefix());
System.out.println(person.getPhone().getNumber());

[置顶] Spring中自定义属性编辑器的更多相关文章

  1. [置顶] Spring中DI设置器注入

    Java的反射机制可以说是在Spring中发挥的淋漓尽致,下面要看的代码就是通过反射机制来实现向一个类注入其实际依赖的类型,这个过程的实现会交由Spring容器来帮我们完成. JavaBean中针对属 ...

  2. [置顶] Spring的DI依赖实现分析

    DI(依赖注入)是Spring最底层的核心容器要实现的功能之一,利用DI可以实现程序功能的控制反转(控制反转即程序之间之间的依赖关系不再由程序员来负责,而是由Spring容器来负责) 一个简单的例子( ...

  3. [置顶] NS2中TCP拥塞控制仿真过程中盲点解析

    最近利用NS2做TCP拥塞控制协议的仿真,发现很多变量的方法含义都是解释的不清楚,给核心模块修改带来很多麻烦,所以决定用最准确的语言解释成员变量.方法,术语等的含义.限于个人水平,若有错误请留言指正! ...

  4. [置顶] NS2中对TCP数据包和ACK包的TCP Sink类的主要实现代码详尽剖析--吐血放送

    NS2中对TCP数据包和ACK包的TCP Sink类的主要实现代码详尽剖析,限于个人水平,如有错误请留言指出! TcpSink类的recv()方法: void TcpSink::recv(Packet ...

  5. [置顶] spring集成mina 实现消息推送以及转发

    spring集成mina: 在学习mina这块时,在网上找了很多资料,只有一些demo,只能实现客户端向服务端发送消息.建立长连接之类.但是实际上在项目中,并不简单实现这些,还有业务逻辑之类的处理以及 ...

  6. [置顶] Spring的自动装配

    采用构造函数注入,以及setter方法注入都需要写大量的XML配置文件,这时可以采用另一种方式,就是自动装,由Spring来给我们自动装配我们的Bean. Spring提供了四种自动装配类型 1:By ...

  7. [置顶] Android中使用Movie显示gif动态图

    转载请注明:  http://blog.csdn.net/u012975705/article/details/48717391 在看这篇博文之前对attr自定义属性还是不是很熟的童鞋可以先看看:An ...

  8. [置顶] linux中fork()函数详解(原创!!实例讲解)

    分类: 计算机系统 linux2010-06-01 23:35 60721人阅读 评论(105) 收藏 举报 linux2010存储  一.fork入门知识 一个进程,包括代码.数据和分配给进程的资源 ...

  9. [置顶] Jquery中DOM操作(详细)

    Jquery中的DOM操作 为了能全面的讲解DOM操作,首先需要构建一个网页. HTML代码: <%@ page language="java" import="j ...

随机推荐

  1. python opencv3 FLANN单应性匹配

    git:https://github.com/linyi0604/Computer-Vision 匹配准确率非常高. 单应性指的是图像在投影发生了 畸变后仍然能够有较高的检测和匹配准确率 # codi ...

  2. python语法(一)

    Python是一种面向对象.直译式电脑编程语言,也是一种功能强大的通用型语言,已经具有近二十年的发展历史,成熟且稳定.在近几年,大数据,人工智能火起来之后也是水涨船高,被越来越多的人知道,并且越来越多 ...

  3. php最简单最基础入门笔记

    偶然翻到之前刚学php时记录的笔记,特此分享给大家,希望对初学者有所帮助. php网页命名不支持中文 isset($abc)   判断变量是否被定义 empty($abc)    判断变量是否为空 u ...

  4. 写在OI退役后和高中毕业前的一些话

    更新日志: 2017.02.13 开坑 2017.02.13 更新[零][壹] 2017.02.14 更新[贰] 2017.02.26 更新[叁][肆] 2017.03.04 锅多如狗,停更一周 20 ...

  5. lnmp环境一键搭建及卸载

    系统需求: CentOS/Debian/Ubuntu Linux系统 需要2GB以上硬盘剩余空间 128M以上内存,OpenVZ的建议192MB以上(小内存请勿使用64位系统) VPS或服务器必须已经 ...

  6. IE7 css兼容问题

    1,float:right; 在IE错位问题 : 使用position:absolute:right:0px; 2,汉字在float状态下 折行 ,可能是因为父级宽度不够, 改用 display:in ...

  7. JavaScript 继承和数组

    前言 因为篇幅比较短,所以将JavaScript中的继承和数组进行统一写. 继承 当一个函数对象被创建的时候,Function构造器产生的函数对象会运行类似这样的代码: this.prototype ...

  8. Minimum Size Subarray Sum 最短子数组之和

    题意 Given an array of n positive integers and a positive integer s, find the minimal length of a suba ...

  9. Opencv各版本的配置

    OpenCV 2.49 + VS2012 配置指南 首先下载 OpenCV2.4.9 源码: 一.  配置系统环境变量 1.  将源码解压到指定目录: 2.  将 opencv 添加到系统环境变量: ...

  10. Spring源码解析 – @Configuration配置类及注解Bean的解析

    在分析Spring 容器创建过程时,我们知道容器默认会加载一些后置处理器PostPRocessor,以AnnotationConfigApplicationContext为例,在构造函数中初始化rea ...