zoukankan      html  css  js  c++  java
  • [置顶] 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());
  • 相关阅读:
    Coursera机器学习week11 单元测试
    关于 TypeReference 的解释
    getModifiers 方法解释。
    instanceof isInstance isAssignableFrom 比较
    elasticsearch 基础 语法总结
    kibana 启动 关闭 和进程查找
    MD5 SHA1 SHA256 SHA512 SHA1WithRSA 的区别
    spring boot 项目 热启动
    java zip 压缩文件
    Packet for query is too large (1660 > 1024). You can change this value on the server by setting the max_allowed_packet' variable.
  • 原文地址:https://www.cnblogs.com/keanuyaoo/p/3253711.html
Copyright © 2011-2022 走看看