前面我们所定义的属性都是几本的属性,如果我们定义一个属性是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>
下次只要我们修改配置文件即可,灵活性很大。
分享到:
相关推荐
本文档记录了尚学堂Spring学习笔记的重要知识点,涵盖了Spring配置文件的设置、普通属性的注入、自定义属性编辑器、公共属性的注入、Spring注解等内容。 一、Spring配置文件的设置 在MyEclipse中编写Spring配置...
- `CustomEditorConfigurer`:允许注册自定义编辑器,用于将字符串转换为特定类型的数据。 3. **事件处理**:Spring框架提供了事件发布和监听机制,可以处理各种应用级别的事件。这包括: - 定义事件类继承自`...
【Spring2.0学习笔记】 在深入探讨Spring2.0的知识点之前,首先理解几个核心概念至关重要。Spring框架的核心设计理念是控制反转(Inversion of Control, IoC)和依赖注入(Dependency Injection, DI)。IoC意味着...
3. **自定义属性编辑器**:Spring允许开发者自定义属性编辑器,用于处理类型转换,比如将字符串转换为日期等复杂类型,这样在注入时可以处理不同类型的属性。 4. **公共属性的注入**:当多个Bean需要共享同一属性值...
10. 自定义编辑器配置器(CustomEditorConfigurer) 文档中出现了“CustomEditorConfigurer”,这是Spring提供的一个用于注册自定义属性编辑器的Bean。它允许我们在应用上下文中注册编辑器类,用于字符串和Java对象...
**Spring MVC 学习笔记** Spring MVC 是 Spring 框架的一个模块,专门用于构建 Web 应用程序。它提供了一种模型-视图-控制器(Model-View-Controller)架构,帮助开发者处理请求、控制应用程序流程,并实现业务逻辑...
Java学习笔记涵盖了多个核心的Java开发技术,包括Spring、Hibernate和Struts,这些都是Java Web开发中的重要框架。让我们深入探讨一下这些技术。 首先,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...
- **属性编辑**:Spring支持自定义属性编辑器,用于将字符串转换成特定类型的值。 - **访问Properties文件**:Spring提供了多种方式来读取和管理Properties文件中的配置信息。 ##### 2.3 AOP容器...
**Eclipse开发学习笔记概述** Eclipse是一款强大的开源集成开发环境(IDE),广泛应用于Java、C++、Python等多种编程语言的开发。它以其强大的插件系统、高效的代码编辑器和灵活的工作空间管理闻名,深受开发者喜爱...
著作:《java jdk 5.0学习笔记》、《java se 6技术手册》、《spring技术手册》等 译作:《ajax实战手册》、《jquery实战手册(第2版)》 个人网站:http://openhome.cc 目录 《java jdk 7学习笔记》 chapter1 ...
此外,还可以使用属性编辑器(PropertyEditor)进行类型转换,比如将字符串转换为整数或浮点数。 为了处理多个请求,Spring MVC 提供了 `MultiActionController` 类,该类允许你为每个请求定义一个方法。方法签名...
在Struts2的学习笔记中,`note.jsp`可能同样用于显示和编辑笔记,但使用的是Struts2的标签库,如`<s:property>`来显示模型对象的属性,以及`s:form`标签创建表单。Struts2允许直接在JSP页面中使用Action的属性,无需...
### JavaEE学习实战笔记心得 #### JavaSE基础要点 - **环境配置**: - **JDK下载与安装**:确保下载与操作系统相匹配的JDK版本,完成安装。 - **环境变量设置**: - **JAVA_HOME**: 指向JDK的安装目录。 - **...
以下是对“Liferay学习笔记1”的详细解释和相关知识点的深入探讨: ### Liferay概述 Liferay是一款开源的企业级门户平台,它提供了一个强大的框架,用于构建企业级应用程序和服务。Liferay的核心功能包括内容管理...
本学习笔记将深入探讨Activiti5的核心概念、主要功能以及如何在实际项目中应用。 一、Activiti5简介 Activiti5是由Alfresco公司开发的轻量级工作流引擎,基于BPMN 2.0标准,支持流程建模、执行和管理。它的设计目标...
### Java_笔记整理 #### 知识点概览 本篇文档主要涵盖了Java学习过程中的核心知识点,并且涉及到了部分Linux/Unix基础知识。通过这份笔记,我们能够深入了解Java语言的基础特性、面向对象的设计原则以及一系列高级...
我们还学习了如何使用`docker exec`命令进入容器中并安装Vim编辑器。 2. 序列化和反序列化: 在本节中,我们学习了如何将集合转换成JSON,并将JSON反序列化成集合。在Java语言中,我们可以使用Jackson库来实现序列...