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:

简直是完美

时间: 2024-11-04 21:43:54

spring 自定义 Property Editor的相关文章

[转载]开发 Spring 自定义视图和视图解析器

原文出处 http://www.ibm.com/developerworks/cn/java/j-lo-springview/ 概述 Spring 3.0 默认包含了多种视图和视图解析器,比如 JSP.Velocity 视图等,但在某些情况下,我们需要开发自定义的视图及其解析器,以便显示特殊文件格式的视图,我们也可以使用自定义视图及解析器,针对特定的视图做相应的处理.本文将通过一个示例来介绍如何开发 Spring 自定义视图和视图解析器,来显示后缀名为 SWF 的视图,并提供一个简单的注册机制,

spring 自定义标签 学习二

在上篇中写的只支持写属性,不支持标签property的写法,但是如果有时候我们还想做成支持 property的用法,则可以在xsd中增加spring 自带的xsd引用 修改xsd文件如下: <?xml version="1.0"encoding="UTF-8"?> <xsd:schema xmlns="http://www.ruishenh.com/custom/myTest" xmlns:xsd="http://ww

(转载)Spring自定义标签的原理

Spring自定义标签的原理 XML通常通过DTD.XSD定义,但DTD的表达能力较弱,XSD定义则能力比较强,能够定义类型,出现次数等.自定义标签需要XSD支持,在实现时使用Namespace扩展来支持自定义标签. <bean id="beanId" class="com.xxx.xxxx.Xxxxx"> <property name="property1"> <value>XXXX</value>

Attribute和自定义Property

property(属性) attribute(特性) property和attribute的同步 id href value class/className 旧IE的趣事 attribute作为DOM节点 总结 DOM节点可能会有attribute和property. 有时候人们会分不清,因为他们是有关联的,但它们又是完全不同的. property DOM是一个对象.因此它可以像普通对象一样存储自定义property及方法. 下例将会给 document.body 添加自定义对象 myData.

Gradle自定义property

?Gradle自定义property 设置和读取Project的Property是使用Gradle的一个很重要的方面.比如,很多Plugin都会向Project中加入额外的Property. 在使用这些Plugin时,我们需要对这些Property进行赋值. Gradle在默认情况下已经为Project定义了很多Property,其中比较常用的有: project:Project本身 name:Project的名字 path:Project的绝对路径 description:Project的描述

Spring 自定义标签配置

前景:经常使用一些依赖于Spring的组件时,发现可以通过自定义配置Spring的标签来实现插件的注入,例如数据库源的配置,Mybatis的配置等.那么这些Spring标签是如何自定义配置的?学习Spring标签的自定义配置为以后实现分布式服务框架做技术储备. 技术分析:Spring的标签配置是通过XML来实现的,通过XSD(xml Schema Definition)来定义元素,属性,数据类型等. Spring自定义标签解析 1.Spring启动时通过扫描根目录下的META-INF文件下的sp

spring 自定义标签 学习

自定义配置文件到spring 中,有时候想做一些数据结构的配置化信息,根据业务做一个扩展. 首先: 在项目的META-INF目录下新建两个文件spring.handlers,和spring.shcemas Spring.handlers在类org.springframework.beans.factory.xml.DefaultNamespaceHandlerResolver中已经写死了要取mapping的handlerMappingsLocation的路径 public static fina

Spring 自定义标签

Spring 工作流程是先加载解析xml配置文件:配置文件中存在默认的标签,也可以自定义标签.解析默认标签调用: 1 private void parseDefaultElement(Element ele, BeanDefinitionParserDelegate delegate) { 2 if (delegate.nodeNameEquals(ele, IMPORT_ELEMENT)) { 3 importBeanDefinitionResource(ele); 4 } 5 else if

spring自定义类中@AutoWired标识的元素注入为null

最近在做项目的时候,发现程序运行的时候有一个nullpointer exception,一脸懵逼因为感觉程序没什么逻辑.后来发现是因为new出来的component不会自动注入它的元素. 现象:@Component修饰的自定义普通类中@Autowired属性为null 原因:如果是通过new实例化的对象,脱离了Spring的管理,所以获取不到Spring注解的属性值. 在新线程中也会存在注解获取不到Spring管理的Bean,也是因为new出来的线程,脱离了Spring容器 我在实际开发中遇到有