Ⅵ.spring的点点滴滴--自定义类型转换器

承接上文

自定义类型转换器


.net篇(环境为vs2012+Spring.Core.dll v1.31

    public class CustomeConverter : TypeConverter{
        public override bool CanConvertFrom(
            ITypeDescriptorContext context,
            Type sourceType){
            return true;
        }
        public override object ConvertFrom(
            ITypeDescriptorContext context, 
            System.Globalization.CultureInfo culture, 
            object value){
            return new TypeCunstomer() { Name = value.ToString() };
        }    
    }
    public class TypeObject{
        public TypeCunstomer Name { get; set; }    
    }
    public class TypeCunstomer{
        public string Name { get; set; }
    }
    <object 
       type="Spring.Objects.Factory.Config.CustomConverterConfigurer, Spring.Core">
    <property name="CustomConverters">
      <dictionary>
        <entry key="SpringBase.TypeCunstomer">
          <object type="SpringBase.CustomeConverter"/>
        </entry>
      </dictionary>
    </property>
  </object>
  <object id="typeconvert" type="SpringBase.TypeObject,SpringBase">
    <property name="Name" value="2"/>
  </object>
  1. 继承中的CanConvertFrom方法是用于判断能否转换,ConvertFrom转换的具体方法

java篇(环境为Maven+Jdk1.7+IntelliJ IDEA 12.1.4

package springdemo;
import java.beans.PropertyEditorSupport;
public class TypeObject {
    private TypeCunstomer name;
    public TypeCunstomer getName() {
        return name;
    }
    public void setName(TypeCunstomer name) {
        this.name = name;
    }
}
class TypeCunstomer {
    private String name;
    String getName() {
        return name;
    }
    void setName(String name) {
        this.name = name;
    }
}
class CustomeConverter extends PropertyEditorSupport {
    @Override
    public void setAsText(String text) throws IllegalArgumentException {
        TypeCunstomer val=new TypeCunstomer();
        val.setName(text+"Convent");
        this.setValue(val);
    }
}
    <bean class="org.springframework.beans.factory.config.CustomEditorConfigurer">
        <property name="customEditors">
            <map>
                <entry key="springdemo.TypeCunstomer">
                    <bean class="springdemo.CustomeConverter" />
                </entry>
            </map>
        </property>
    </bean>
    <bean id="typeObject" class="springdemo.TypeObject">
        <property name="name" value="1"/>
    </bean>
  1. 重写setAsText方法,其中setValue的参数为object

javaCsharp的共同点

  1. 配置文件中的dictionary|map标签设置的key为要转换的类型,值为转换的方法类
  2. 都是继承一个对象,然后重写方法来自定义类型的转换

posted @ 2013-12-10 14:22  cnljli  阅读(486)  评论(0编辑  收藏  举报