11点睛Spring4.1-Property Editor

11.1 Propert Editor

  • property editor是JavaBeans API的一项特性,用来字符和属性值之间的互相转换(如2014-03-02Date类型的互相转换)
  • spring内置了CustomDateEditor, CustomNumberEditor, ClassEditor, FileEditor, LocaleEditor, StringArrayPropertyEditor
  • 除了内置的property editor,如需自己定制额外的复杂情况继承JavaBeans API的PropertyEditorSupport

11.2 示例

11.2.1 使用Spring内置的Editor

11.2.1.1 编写演示bean
import java.util.Date;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component
public class DemoBean {
    @Value("2014/02/03")
    private Date demoDate;

    public Date getDemoDate() {
        return demoDate;
    }

    public void setDemoDate(Date demoDate) {
        this.demoDate = demoDate;
    }


}
11.2.1.2 编写配置
package com.wisely.propertyeditor;

import java.text.SimpleDateFormat;

import org.springframework.beans.propertyeditors.CustomDateEditor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class DemoConfig {
    @Bean
    public CustomDateEditor dateEditor(){
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd");
        return new CustomDateEditor(dateFormat, true);
    }
}
11.2.1.3 测试
package com.wisely.propertyeditor;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class Main {
    public static void main(String[] args) {
        AnnotationConfigApplicationContext context =
                new AnnotationConfigApplicationContext("com.wisely.propertyeditor");
        DemoBean demoBean = context.getBean(DemoBean.class);
        System.out.println(demoBean.getDemoDate());
        context.close();
    }
}

输出结果

Mon Feb 03 00:00:00 CST 2014

11.2.2 使用PropertyEditorSupport

11.2.2.1 编写需要和字符转换的javabean

此为传值对象,不需要声明称spring的bean

package com.wisely.propertyeditor;

public class DemoBean2 {
    private String name;
    private String address;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getAddress() {
        return address;
    }
    public void setAddress(String address) {
        this.address = address;
    }

}
11.2.2.2 在DemoBean中注入该bean
package com.wisely.propertyeditor;

import java.util.Date;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component
public class DemoBean {

    @Value("汪云飞-合肥")
    private DemoBean2 demoBean2;


    public DemoBean2 getDemoBean2() {
        return demoBean2;
    }

    public void setDemoBean2(DemoBean2 demoBean2) {
        this.demoBean2 = demoBean2;
    }

}
11.2.2.3 实现自定义的Property Editor
package com.wisely.propertyeditor;

import java.beans.PropertyEditorSupport;

public class DemoPropertyEditor extends PropertyEditorSupport{

    @Override
    public String getAsText() {
        DemoBean2 bean2 =(DemoBean2) getValue();
        return bean2.getClass().getName() + "," + bean2.getName() 
                                     + "," + bean2.getAddress();
    }

    @Override
    public void setAsText(String text) throws IllegalArgumentException {
        String[] parts = text.split("-");
        try{
            DemoBean2 bean2 = new DemoBean2();
            bean2.setName(parts[0]);
            bean2.setAddress(parts[1]);
            setValue(bean2);
        }catch(Exception e){
            throw new IllegalArgumentException(e);
        }

    }

}
11.2.2.4 配置editorConfigurer
package com.wisely.propertyeditor;

import java.beans.PropertyEditor;
import java.util.HashMap;
import java.util.Map;

import org.springframework.beans.factory.config.CustomEditorConfigurer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class Demo2Config {
    @Bean
    public CustomEditorConfigurer editorConfigurer(){
        CustomEditorConfigurer editorConfigurer = new CustomEditorConfigurer();
        Map<Class<?>, Class<? extends PropertyEditor>> customEditors =
                new HashMap<Class<?>, Class<? extends PropertyEditor>>();
        customEditors.put(DemoBean2.class, DemoPropertyEditor.class);
        editorConfigurer.setCustomEditors(customEditors);
        return editorConfigurer;
    }

}
11.2.2.5 测试
package com.wisely.propertyeditor;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class Main {

    public static void main(String[] args) {
        AnnotationConfigApplicationContext context =
                new AnnotationConfigApplicationContext("com.wisely.propertyeditor");
        DemoBean demoBean = context.getBean(DemoBean.class);
        System.out.println(demoBean.getDemoBean2().getName()+"///"
                       +demoBean.getDemoBean2().getAddress());
        context.close();
    }
}

输出结果

汪云飞///合肥

新书推荐《JavaEE开发的颠覆者: Spring Boot实战》,涵盖Spring 4.x、Spring MVC 4.x、Spring Boot企业开发实战。

 

京东地址:http://item.jd.com/11894632.html

当当地址:http://product.dangdang.com/23926195.html

亚马逊地址:http://www.amazon.cn/图书/dp/B01D5ZBFUK/ref=zg_bsnr_663834051_6 

淘宝地址:https://item.taobao.com/item.htm?id=528426235744&ns=1&abbucket=8#detail

 

 

 

或自己在京东、淘宝、亚马逊、当当、互动出版社搜索自选。

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值