spring 自定义 Property Editor

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring 自定义 Property Editor相关的知识,希望对你有一定的参考价值。

1:集成java.beans.PropertyEditorSupport,并实现(重写)其setAsText()方法

2:在application Context中注册刚刚自定义的类

实例:

1.先弄一个实体类,比如这个Dog:

package fuckSpring.propertyEditor;

public class Dog {
    private String name;
    private String type;
    private int age;
    
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getType() {
        return type;
    }
    public void setType(String type) {
        this.type = type;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    
    public String toString(){
        return this.name+this.type+this.age;
    }
}

2.下面就是重头戏:MyPropertyEditor

package fuckSpring.propertyEditor;

import java.beans.PropertyEditorSupport;

public class MyPropertyEditor extends PropertyEditorSupport{
    public void setAsText(String s){
        String[] ss=s.split("\\|");//  \\作为转义用
        Dog d=new Dog();
        d.setName(ss[0]);
        d.setType(ss[1]);
        d.setAge(Integer.parseInt(ss[2]));
        setValue(d);//把转化出来的对象设置,spring将会把这个对象赋值给需要的引用
    }

}

3.定义一个MyTest类,用来测试

package fuckSpring.propertyEditor;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class MyTest {
    private Dog dog;

    public Dog getDog() {
        return dog;
    }

    public void setDog(Dog dog) {
        this.dog = dog;
    }
    
    public static void main(String[] args){
        ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml");
        MyTest mt=(MyTest) ac.getBean("myTest");
        System.out.println(mt.getDog());
    }
    
}

4,配置applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd" [
<!ENTITY contextInclude SYSTEM "org/springframework/web/context/WEB-INF/contextInclude.xml">
]>

<beans>
    <bean name="customEditorConfigurer" class="org.springframework.beans.factory.config.CustomEditorConfigurer">
        <property name="customEditors">
            <map>
                <entry key="fuckSpring.propertyEditor.Dog" value="fuckSpring.propertyEditor.MyPropertyEditor">
                </entry>
                <!-- 本来是用下面被注释掉的方法进行注册PropertyEditor的,因为我的参考书上是这样注册的,但是运行起来报错,说不能映射,后来上网搜了下,看有用上面的方法注册的 -->
                <!--
                <entry key="fuckSpring.propertyEditor.Dog">
                    <bean class="fuckSpring.propertyEditor.MyPropertyEditor"></bean>
                </entry>
                 -->
            </map>
        </property>
    </bean>
    
    <bean id="myTest" class="fuckSpring.propertyEditor.MyTest">
        <property name="dog">
            <value>二狗子|泰迪|3</value>
        </property>
    </bean>

</beans>

5,最后运行MyTest类,结果控制台输出:

二狗子泰迪3

ps:

简直是完美

 

以上是关于spring 自定义 Property Editor的主要内容,如果未能解决你的问题,请参考以下文章

自定义 Spring Boot 启动器不应用属性

Spring中property-placeholder的使用与解析

[转]Spring中property-placeholder的使用与解析

Spring Boot – 自定义PropertyEditor

Spring之Environment

Gradle —— 添加自定义 Property