• [置顶] 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());
  • 相关阅读:
    c# 不常用逻辑运算符
    c# 简单日志记录类 log

    最短路径
    A+B
    floyd 算法
    Kruskal 算法
    快排
    顺序表的逆排
    顺序表中多余元素的删除
  • 原文地址:https://www.cnblogs.com/keanuyaoo/p/3253711.html
Copyright © 2020-2023  润新知