`
coolszy
  • 浏览: 1412500 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Spring学习笔记(11)----自定义属性编辑器

阅读更多

前面我们所定义的属性都是几本的属性,如果我们定义一个属性是Date类型,例如如下类中:

package com.szy.spring.bean;

import java.util.Date;

public class Bean {
	private Date date;

	public Date getDate()
	{
		return date;
	}
	public void setDate(Date date)
	{
		this.date = date;
	}
}

 按照我们以前学过的知识我们需要在配置文件中给该属性注入值

<bean id="bean" class="com.szy.spring.bean.Bean">
		<property name="date" value="2009-11-21"/>
	</bean>

 下面我们测试是否成功注入值

ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");
		Bean bean = (Bean)ctx.getBean("bean");
		System.out.println(bean.getDate());

 运行包如下异常

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'bean' defined in class path resource [applicationContext.xml]: Initialization of bean failed; nested exception is org.springframework.beans.TypeMismatchException: Failed to convert property value of type [java.lang.String] to required type [java.util.Date] for property 'date'; nested exception is java.lang.IllegalArgumentException: Cannot convert value of type [java.lang.String] to required type [java.util.Date] for property 'date': no matching editors or conversion strategy found

 通过错误提示信息我们得知spring不能将string转换成date类型,没有匹配的编辑器或者转换机制。
如果想实现string转换成Date,那么我们自己需要写一个属性编辑器

我们新建一个类DatePropertyEditor,这个类要继承PropertyEditorSupport类。
我们需要复写这个类中的setAsText方法,其中text参数就是配置文件中的值。我们的任务就是把text转换成date类型的值。

package com.szy.spring.util;

import java.beans.PropertyEditorSupport;
import java.text.SimpleDateFormat;
import java.util.Date;

public class DatePropertyEditor extends PropertyEditorSupport
{

	@Override
	public void setAsText(String text) throws IllegalArgumentException
	{
		String format="yyyy-MM-dd";
		SimpleDateFormat sdf=new SimpleDateFormat(format);
		try
		{
			Date date=sdf.parse(text);
			this.setValue(date);  //把转换后的值传过去
		} catch (Exception e)
		{
			e.printStackTrace();
		}
	}

}

写完编辑器后我们还需要把编辑器注入到spring中。 为了方便管理我们再新建一个配置文件applicationEditor.xml,用来配置属性编辑器

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:tx="http://www.springframework.org/schema/tx"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
				http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
				http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
	<bean id="customEditorConfigurer" class="org.springframework.beans.factory.config.CustomEditorConfigurer">
		<!-- 把值注入到CustomEditorConfigurer的 Map类型的customEditors属性-->
		<property name="customEditors">
			<map>
				<entry key="java.util.Date">
					<!-- 内部bean只供自己使用 -->
					<bean class="com.szy.spring.util.DatePropertyEditor"/>
				</entry>
			</map>
		</property>
	</bean>
	
</beans>

 

下面我们修改下测试代码已读取所有的配置文件

ApplicationContext ctx=new ClassPathXmlApplicationContext("application*.xml");
		Bean bean = (Bean)ctx.getBean("bean");
		System.out.println(bean.getDate());

 

最后测试,成功输出时间。

刚才我们在配置文件中时间的格式是2009-11-21,如果我们修改成2009/11/21呢?

运行报错:Unparseable date: "2009/11/21"

这时我们需要修改属性编辑器类文件的格式了,很麻烦。既然spring支持注入,那么我们为什么不对格式进行注入呢?

修改属性编辑器类:

package com.szy.spring.util;

import java.beans.PropertyEditorSupport;
import java.text.SimpleDateFormat;
import java.util.Date;

public class DatePropertyEditor extends PropertyEditorSupport
{

	private String format;
	@Override
	public void setAsText(String text) throws IllegalArgumentException
	{
		
		SimpleDateFormat sdf=new SimpleDateFormat(format);
		try
		{
			Date date=sdf.parse(text);
			this.setValue(date);  //把转换后的值传过去
		} catch (Exception e)
		{
			e.printStackTrace();
		}
	}
	public String getFormat()
	{
		return format;
	}
	public void setFormat(String format)
	{
		this.format = format;
	}
}

 

同时给该类对应的bean添加属性节点

<bean class="com.szy.spring.util.DatePropertyEditor">
						<property name="format" value="yyyy/MM/dd"></property>
					</bean>

 

下次只要我们修改配置文件即可,灵活性很大。

分享到:
评论
2 楼 coolszy 2009-11-21  
microjava 写道
最后一个xml代码中:
<property name="format" value="2009/11/21"></property>

应该是:<property name="format" value="yyyy/MM/dd"></property>

谢谢提醒
1 楼 microjava 2009-11-21  
最后一个xml代码中:
<property name="format" value="2009/11/21"></property>

应该是:<property name="format" value="yyyy/MM/dd"></property>

相关推荐

    尚学堂Spring学习笔记

    本文档记录了尚学堂Spring学习笔记的重要知识点,涵盖了Spring配置文件的设置、普通属性的注入、自定义属性编辑器、公共属性的注入、Spring注解等内容。 一、Spring配置文件的设置 在MyEclipse中编写Spring配置...

    spring学习笔记2

    - `CustomEditorConfigurer`:允许注册自定义编辑器,用于将字符串转换为特定类型的数据。 3. **事件处理**:Spring框架提供了事件发布和监听机制,可以处理各种应用级别的事件。这包括: - 定义事件类继承自`...

    Spring2.0学习笔记

    【Spring2.0学习笔记】 在深入探讨Spring2.0的知识点之前,首先理解几个核心概念至关重要。Spring框架的核心设计理念是控制反转(Inversion of Control, IoC)和依赖注入(Dependency Injection, DI)。IoC意味着...

    Spring学习笔记

    3. **自定义属性编辑器**:Spring允许开发者自定义属性编辑器,用于处理类型转换,比如将字符串转换为日期等复杂类型,这样在注入时可以处理不同类型的属性。 4. **公共属性的注入**:当多个Bean需要共享同一属性值...

    Spring个人学习笔记.pdf

    10. 自定义编辑器配置器(CustomEditorConfigurer) 文档中出现了“CustomEditorConfigurer”,这是Spring提供的一个用于注册自定义属性编辑器的Bean。它允许我们在应用上下文中注册编辑器类,用于字符串和Java对象...

    spring MVC学习笔记

    **Spring MVC 学习笔记** Spring MVC 是 Spring 框架的一个模块,专门用于构建 Web 应用程序。它提供了一种模型-视图-控制器(Model-View-Controller)架构,帮助开发者处理请求、控制应用程序流程,并实现业务逻辑...

    Java学习笔记,spring,hibernate,struts

    Java学习笔记涵盖了多个核心的Java开发技术,包括Spring、Hibernate和Struts,这些都是Java Web开发中的重要框架。让我们深入探讨一下这些技术。 首先,Java是一种广泛使用的编程语言,以其跨平台性和面向对象的...

    Java学习笔记-个人整理的

    {11}项目}{148}{chapter.11} {11.1}ELTS}{148}{section.11.1} {12}Oracle数据库}{151}{chapter.12} {12.1}术语}{151}{section.12.1} {12.2}登录数据库}{151}{section.12.2} {12.3}创建表格}{152}{section.12.3...

    java常用框架学习笔记

    - **属性编辑**:Spring支持自定义属性编辑器,用于将字符串转换成特定类型的值。 - **访问Properties文件**:Spring提供了多种方式来读取和管理Properties文件中的配置信息。 ##### 2.3 AOP容器...

    Eclipse开发学习笔记

    **Eclipse开发学习笔记概述** Eclipse是一款强大的开源集成开发环境(IDE),广泛应用于Java、C++、Python等多种编程语言的开发。它以其强大的插件系统、高效的代码编辑器和灵活的工作空间管理闻名,深受开发者喜爱...

    Java JDK 7学习笔记(国内第一本Java 7,前期版本累计销量5万册)

    著作:《java jdk 5.0学习笔记》、《java se 6技术手册》、《spring技术手册》等 译作:《ajax实战手册》、《jquery实战手册(第2版)》 个人网站:http://openhome.cc 目录 《java jdk 7学习笔记》 chapter1 ...

    springmvc 学习笔记

    此外,还可以使用属性编辑器(PropertyEditor)进行类型转换,比如将字符串转换为整数或浮点数。 为了处理多个请求,Spring MVC 提供了 `MultiActionController` 类,该类允许你为每个请求定义一个方法。方法签名...

    Struts1及14. Struts2学习笔记

    在Struts2的学习笔记中,`note.jsp`可能同样用于显示和编辑笔记,但使用的是Struts2的标签库,如`&lt;s:property&gt;`来显示模型对象的属性,以及`s:form`标签创建表单。Struts2允许直接在JSP页面中使用Action的属性,无需...

    JavaEE学习实战笔记心得

    ### JavaEE学习实战笔记心得 #### JavaSE基础要点 - **环境配置**: - **JDK下载与安装**:确保下载与操作系统相匹配的JDK版本,完成安装。 - **环境变量设置**: - **JAVA_HOME**: 指向JDK的安装目录。 - **...

    liferay学习笔记1

    以下是对“Liferay学习笔记1”的详细解释和相关知识点的深入探讨: ### Liferay概述 Liferay是一款开源的企业级门户平台,它提供了一个强大的框架,用于构建企业级应用程序和服务。Liferay的核心功能包括内容管理...

    Activiti5学习笔记

    本学习笔记将深入探讨Activiti5的核心概念、主要功能以及如何在实际项目中应用。 一、Activiti5简介 Activiti5是由Alfresco公司开发的轻量级工作流引擎,基于BPMN 2.0标准,支持流程建模、执行和管理。它的设计目标...

    Java_笔记整理

    ### Java_笔记整理 #### 知识点概览 本篇文档主要涵盖了Java学习过程中的核心知识点,并且涉及到了部分Linux/Unix基础知识。通过这份笔记,我们能够深入了解Java语言的基础特性、面向对象的设计原则以及一系列高级...

    B站整理的乐优商城笔记

    我们还学习了如何使用`docker exec`命令进入容器中并安装Vim编辑器。 2. 序列化和反序列化: 在本节中,我们学习了如何将集合转换成JSON,并将JSON反序列化成集合。在Java语言中,我们可以使用Jackson库来实现序列...

Global site tag (gtag.js) - Google Analytics