Spring源码-自定义属性编辑器

在Spring配置文件中,经常使用这样的配置

public Class Boss {
    private String name;
    private int age;
    private Car car;
    //getter,setter
}

public class Car {
    private String brand;
    private String color;
    private String maxSpeed;
    private Integer weight;
    //getter,setter
}

<bean class="main.java.com.sxd.domain.Boss" name="boss">
        <property name="name" value="Shixiaodong"/>
        <property name="age" value="22"/>
        <property name="car" value="BMW,Black,200m/s,2000"/>
</bean>

不论什么值都是用value来表时,那么在内部一定有相关的转换的工具将String转为和属性相同类型的值

1. PropertyEditor
这里写图片描述

2. PropertyEditorSupport
这里写图片描述

继承关系
这里写图片描述

3. 自定义属性编辑器

public class CustomCarEditor extends PropertyEditorSupport {
    @Override
    public void setAsText(String text) throws IllegalArgumentException {
        if(text == null) {
            throw new IllegalArgumentException("设置的字符串格式不正确.");
        }
        String[] infos = text.split(",");
        Car car = new Car();
        car.setBrand(infos[0]);
        car.setColor(infos[1]);
        car.setMaxSpeed(infos[2]);
        car.setWeight(Integer.parseInt(infos[3]));
        //将Car转化为属性的值
        setValue(car);
    }
}

4.1注册属性编辑器
XML配置编辑器,ApplicationContext已经注册CustomEditor,而BeanFactory需要手动注册BeanFactory的后置处理器CustomEditorConfigurer

  <bean class="org.springframework.beans.factory.config.CustomEditorConfigurer">
        <property name="customEditors">
            <map>
                <!--Car属性由CustomeCarEditor处理-->
                <entry key="main.java.com.sxd.domain.Car" value="main.java.com.sxd.domain.CustomCarEditor"></entry>
            </map>
        </property>

    </bean>

4.2 精通Spring4.x企业应用开发实战中P192提到
在和Bean相同的包下只需要存在{BeanName}Editor会被自动扫描到
这里写图片描述

5.Debug测试(出栈顺序)
XML配置的属性进入
这里写图片描述
editor=CustomCarEditor
这里写图片描述
获取到属性,准备将值给合适的编辑器转化
这里写图片描述
查找编辑器
这里写图片描述

Ps:例子来自:精通Spring4.x企业应用开发实战
很喜欢Intellij IDEA的debug,功能很强大,Spring的IoC和AOP看一段的时间了,只是会用一点简单的基础的功能,也试试看看读一读源码,虽然做不到细致入微,但是给自己的要求是只要理解每个接口,方法的大致作用,以及对类/接口的继承体系有一个大体的认知,(StarUML,Xmind,MyBase)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值