• SpringIOC自定义属性编辑器PropertyEditor



    Spring中我们可以使用属性编辑器来将特定的字符串转换为对象
    String--转换-->object

    java.beans.PropertyEditor(JDK中的接口)用于将xml文件中字符串转换为特定的类型,同时JDK为我们提供一个实现类java.beans.PropertyEditorSupport

    Spring在注入时,如果遇到类型不一致(例如需要Address类型但是用户传了个String)则会去调用相应的属性编辑器进行转换

    spring会调用属性编辑器的setAsText(String str)进行处理用户传的字符串,并调用getValue()方法获取处理后得到的对象
    在代码中处理完后需要调用setValue方法,要不然spring调用getValue方法拿不到处理后转换成的对象

    自定义属性编辑器示例:
    注意:在配置文件中CustomEditorConfigurer类的使用,在htmlsingle中直接搜索类名即可

    Address类

    public class Address {
    private String city;
    private String street;
    private String country;
    set/get
    .....
    }

    Student类

    public class Student {
    private long id;
    private String name;
    private boolean gender;
    private int age;
    private Address address;
    get/set
    ...
    }

    自定义编辑器类

    public class AddressEditor extends PropertyEditorSupport {
    
    @Override
    public String getAsText() {
    return super.getAsText();
    }
    
    //Spring遇到数据类型不一致并且不能自己处理的时候会调用这个方法处理字符串
    @Override
    public void setAsText(String text) throws IllegalArgumentException {
    String[] str = text.split(",");
    String city = str[0];
    String street = str[1];
    String country = str[2];
    Address add = new Address(city, street, country);
    setValue(add);
    }
    
    }

    xml文件:

    <!-- 这个配置指明哪个类型对应哪个自定义编辑器 -->
    <bean class="org.springframework.beans.factory.config.CustomEditorConfigurer">
    <property name="customEditors">
    <map>
    <entry key="com.briup.ioc.proEdit.Address" value="com.briup.ioc.proEdit.AddressEditor"/>
    </map>
    </property>
    </bean>
    
    <!-- spring发现address的类型是Address的时候,就会调用对应的属性编辑器处理AddressEditor了 -->
    <bean id="student" class="com.briup.ioc.proEdit.Student">
    <property name="id" value="1"/>
    <property name="name" value="tom"/>
    <property name="age" value="45"/>
    <property name="gender" value="true"/>
    <property name="address">
    <value>kunshan,xueyuan,China</value>
    </property>
    </bean>

    这个注册编辑器的操作在高版本的Spring框架中可以不写,这与框架的版本有关

  • 相关阅读:
    StrutsTestCase 试用手记
    java版的SHA1
    看看junit在一个具体的项目中
    store/index.js中引入并注册modules目录中的js文件:require.context
    vue项目报错:$ is not defined
    状态合并:replaceState
    路由导航守卫中document.title = to.meta.title的作用
    vue路由中meta的作用
    BCryptPasswordEncoder加密与MD5加密
    滑块验证机制
  • 原文地址:https://www.cnblogs.com/Magic-Li/p/11723388.html
Copyright © 2020-2023  润新知