Spring-类型转换

使用场景

在这里插入图片描述
1 数据绑定
在这里插入图片描述
2 BeanWrapper

在这里插入图片描述
在这里插入图片描述
3 Spring拓展PropertyEditor
在这里插入图片描述
案例演示:

public class StringToPropertiesPropertyEditor extends PropertyEditorSupport implements PropertyEditor {
    // 1.实现setAsTest() 方法
    @Override
    public void setAsText(String text) throws IllegalArgumentException {
        Properties properties = new Properties();
        try {
            properties.load(new StringReader(text));
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        setValue(properties);
    }
}
public class ConversionDemo {
    public static void main(String[] args) {
        String text = "name = 李勇";
        PropertyEditor propertyEditor = new StringToPropertiesPropertyEditor();
        propertyEditor.setAsText(text);
        System.out.println(propertyEditor.getValue());

    }
}

4 Spring内建实现
在这里插入图片描述

5 自定义PropertyEditor拓展
在这里插入图片描述

public class CustomizePropertyEditorRegistrar implements PropertyEditorRegistrar {

    @Override
    public void registerCustomEditors(PropertyEditorRegistry registry) {
        registry.registerCustomEditor(Person.class, "context", new StringToPropertiesPropertyEditor());
    }
}
public static void main(String[] args) {
    AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
    context.register(CustomizePropertyEditorRegistarDemo.class);
    context.refresh();
    Person person = context.getBean("person", Person.class);
    System.out.println(person);

    context.close();
}
@Value("name=liyong")
private Properties context;

我们会发现,我们写的值会被转换为Properties对象。

6 PropertyEditor 设计缺陷

Spring3 通用类型转换

在这里插入图片描述
内建实现:
在这里插入图片描述
Converter接口的局限性:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
自定义拓展:

public class PropertiesToStringConverter implements ConditionalGenericConverter {
    @Override
    public boolean matches(TypeDescriptor sourceType, TypeDescriptor targetType) {
        return Properties.class.equals(sourceType.getObjectType())
                && String.class.equals(targetType.getObjectType());
    }

    @Override
    public Set<ConvertiblePair> getConvertibleTypes() {
        return Collections.singleton(new ConvertiblePair(Properties.class, String.class));
    }

    @Override
    public Object convert(Object source, TypeDescriptor sourceType, TypeDescriptor targetType) {
        Properties properties = (Properties) source;
        StringBuilder builder = new StringBuilder();

        for (Map.Entry<Object, Object> entry : properties.entrySet()) {
            builder.append(entry.getKey()).append("=").append(entry.getValue())
                    .append(System.getProperty("line.separator"));
        }
        return builder;
    }
}

这里进行注册时候后名称必须为conversionService
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值