[置顶] Spring中自定义属性编辑器
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中自定义属性编辑器的更多相关文章
- [置顶] Spring中DI设置器注入
Java的反射机制可以说是在Spring中发挥的淋漓尽致,下面要看的代码就是通过反射机制来实现向一个类注入其实际依赖的类型,这个过程的实现会交由Spring容器来帮我们完成. JavaBean中针对属 ...
- [置顶] Spring的DI依赖实现分析
DI(依赖注入)是Spring最底层的核心容器要实现的功能之一,利用DI可以实现程序功能的控制反转(控制反转即程序之间之间的依赖关系不再由程序员来负责,而是由Spring容器来负责) 一个简单的例子( ...
- [置顶] NS2中TCP拥塞控制仿真过程中盲点解析
最近利用NS2做TCP拥塞控制协议的仿真,发现很多变量的方法含义都是解释的不清楚,给核心模块修改带来很多麻烦,所以决定用最准确的语言解释成员变量.方法,术语等的含义.限于个人水平,若有错误请留言指正! ...
- [置顶] NS2中对TCP数据包和ACK包的TCP Sink类的主要实现代码详尽剖析--吐血放送
NS2中对TCP数据包和ACK包的TCP Sink类的主要实现代码详尽剖析,限于个人水平,如有错误请留言指出! TcpSink类的recv()方法: void TcpSink::recv(Packet ...
- [置顶]
spring集成mina 实现消息推送以及转发
spring集成mina: 在学习mina这块时,在网上找了很多资料,只有一些demo,只能实现客户端向服务端发送消息.建立长连接之类.但是实际上在项目中,并不简单实现这些,还有业务逻辑之类的处理以及 ...
- [置顶] Spring的自动装配
采用构造函数注入,以及setter方法注入都需要写大量的XML配置文件,这时可以采用另一种方式,就是自动装,由Spring来给我们自动装配我们的Bean. Spring提供了四种自动装配类型 1:By ...
- [置顶] Android中使用Movie显示gif动态图
转载请注明: http://blog.csdn.net/u012975705/article/details/48717391 在看这篇博文之前对attr自定义属性还是不是很熟的童鞋可以先看看:An ...
- [置顶] linux中fork()函数详解(原创!!实例讲解)
分类: 计算机系统 linux2010-06-01 23:35 60721人阅读 评论(105) 收藏 举报 linux2010存储 一.fork入门知识 一个进程,包括代码.数据和分配给进程的资源 ...
- [置顶] Jquery中DOM操作(详细)
Jquery中的DOM操作 为了能全面的讲解DOM操作,首先需要构建一个网页. HTML代码: <%@ page language="java" import="j ...
随机推荐
- js date 相关
- 数据预处理:规范化(Normalize)和二值化(Binarize)
注:本文是人工智能研究网的学习笔记 规范化(Normalization) Normalization: scaling individual to have unit norm 规范化是指,将单个的样 ...
- codevs 5971 打击犯罪
5971 打击犯罪 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 某个地区有n(n<=1000)个犯罪团伙,当地警方按照他们 ...
- Android ContentObserver详解
前言: 工作中,需要开启一个线程大量的查询某个数据库值发送了变化,导致的开销很大,后来在老大的指点下,利用了ContentObserver完美的解决了该问题,感到很兴奋,做完之后自己也对Content ...
- Linux下gcc与g++用法以及编写makefile
1. gcc与g++编译流程: 1) 编译流程: 2) 预处理:生成.i的预处理文件. Ø 只激活预处理,这个不生成文件,需要把它重定向一个输出文件. ...
- bzoj 4033
树形DP,dp[i][j]表示i子树中,选了j个白点,i子树中所有边的贡献. /************************************************************ ...
- hdu 4451 Dressing 排列组合/水题
Dressing Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Subm ...
- Git_创建标签
在Git中打标签非常简单,首先,切换到需要打标签的分支上: $ git branch * dev master $ git checkout master Switched to branch 'ma ...
- MAIN/autoslb.py · 林語/autoslb - 码云 - 开源中国
MAIN/autoslb.py · 林語/autoslb - 码云 - 开源中国 CloudXNS
- 光速 React
光速 React Vixlet 团队优化性能的经验教训 在过去一年多,我们 Vixlet 的 web 团队已经着手于一个激动人心的项目:将我们的整个 web 应用迁移到 React + Redux 架 ...