`
huangkun1123
  • 浏览: 23775 次
  • 性别: Icon_minigender_1
  • 来自: 程序帝国
社区版块
存档分类
最新评论

spring中的属性编辑器

阅读更多

spring中的属性编辑器:
1.属性编辑器本身是由Java提供了,Spring只是利用了这一特性使装配一个Bean更容易而已。
2.应用场景(如以下例子中):
如果有一个pojo类Demo.java,其只有一个java.util.Date类型的属性,代码如下:
public class Demo {

 

public Date date;

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

其在spring的配置文件applicationContext.xml中的配置为:
<bean id="demo" class="org.huang.Demo" abstract="false"
  lazy-init="default" autowire="default" dependency-check="default">
  <property name="date">
   <value>2008-08-01</value>
  </property>
 </bean>

客户端的代码为:
        BeanFactory factory=new  
ClassPathXmlApplicationContext ("applicationContext.xml"); 
 Demo demo=(Demo) factory.getBean("demo");
 System.out.println(demo.getDate().toString());

如果执行如上代码,则控制台会抛出异常,异常信息大概如下:
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无法找到合适的转换策略,需要自己写一个转换器,在spring中称之为属性编辑器。spring中的属性编辑器可以将字符串转换为相应的对象,然后注入到其它对象中去。编写自己的属性编辑器的步骤很简单,属性编辑器类需要从java.beans.PropertyEditorSupport类继承,在这个类中有一个setAsText方法,这个方法有一个String类型的参数,通过这个方法,可以将String类型的参数值转换成其他类型的属性。在这个方法中我们还需要使用一个setValue方法,就来指定转换后的对象实例。
下面我们就来编写这个实例的属性编辑器:其代码如下:
public class DatePropertyEditor extends PropertyEditorSupport {

 public void setAsText(String text) throws IllegalArgumentException {
  
  SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd");
  try {
   this.setValue(format.parse(text));
  } catch (ParseException e) {
   e.printStackTrace();
  }
  }
}

属性编辑器写完以后要将这个属性编辑器配置到spring配置文件中去,通过注册让spring知道:
其配置如下:
<bean id="customEditorConfigurer"  class="org.springframework.beans.factory.config.CustomEditorConfigurer">
  <property name="customEditors">
     <map>
       <entry key="java.util.Date" >
         <bean class="com.huang.DatePropertyEditor"></bean>
       </entry>
     </map>
  </property>
 </bean>
CustomEditorConfigurer实现BeanFactoryPostProcessor接口,因此是一个Bean工厂后处理器。我们知道Bean工厂后处理器在Spring容器加载配置文件并生成BeanDefinition半成品后就会被自动执行。因此CustomEditorConfigurer在容器启动时有机会注入自定义的属性编辑器。
属性编辑器是使用了CustomEditorConfigurer的customEditors属性进行安装的。这是一个Map类型的属性。key的值必须是属性编辑器最终转换后的类型名,如在本例中,要将文本的参数值转换成java.util.Date,因此,key必须为java.util.Date。
这样就完成了属性编辑器的注册,然后运行客户端的代码,控制台将打印Fri Aug 01 00:00:00 CST 2008


PropertyEditor
PropertyEditor是属性编辑器的接口,它规定了将外部设置值转换为内部JavaBean属性值的转换接口方法。PropertyEditor主要的接口方法说明如下:

—  Object getValue():返回属性的当前值。基本类型被封装成对应的封装类实例;

—  void setValue(Object newValue):设置属性的值,基本类型以封装类传入;

—  String getAsText():将属性对象用一个字符串表示,以便外部的属性编辑器能以可视化的方式显示。缺省返回null,表示该属性不能以字符串表示;

—  void setAsText(String text):用一个字符串去更新属性的内部值,这个字符串一般从外部属性编辑器传入;

—  String[] getTags():返回表示有效属性值的字符串数组(如boolean属性对应的有效Tag为true和false),以便属性编辑器能以下拉框的方式显示出来。缺省返回null,表示属性没有匹配的字符值有限集合;

—  String getJavaInitializationString():为属性提供一个表示初始值的字符串,属性编辑器以此值作为属性的默认值。

可以看出PropertyEditor接口方法是内部属性值和外部设置值的沟通桥梁。此外,我们可以很容易地发现该接口的很多方法是专为IDE中的可视化属性编辑器提供的:如getTags()、getJavaInitializationString()以及另外一些我们未此介绍的接口方法。

Java为PropertyEditor提供了一个方便类:PropertyEditorSupport,该类实现了PropertyEditor接口并提供默认实现,一般情况下,用户可以通过扩展这个方便类设计自己的属性编辑器。

分享到:
评论
1 楼 beipiaoonline 2010-12-17  
thx         

相关推荐

    spring 自定义属性编辑器

    在Spring框架中,属性编辑器(PropertyEditor)是一种强大的工具,允许我们自定义类型转换过程。当我们需要将字符串形式的数据转换为Java对象时,属性编辑器就发挥了关键作用。例如,从请求参数或配置文件中读取的...

    spring中的自定义属性编辑器

    在Spring框架中,属性编辑器(PropertyEditor)扮演着至关重要的角色。它们是JavaBeans规范的一部分,用于在Java对象和其字符串表示之间进行转换。在Spring中,我们可以通过自定义属性编辑器来处理特定类型的值,...

    spring2.0(三) 自定义属性编辑器

    一、Spring属性编辑器概述 Spring MVC和Spring Bean的初始化过程中,属性编辑器扮演着关键角色。当Spring尝试将配置文件中的属性值注入到Bean的属性时,如果该属性类型与配置值的类型不匹配,Spring会查找合适的...

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

    在Spring框架中,属性编辑器(PropertyEditor)扮演着至关重要的角色。它们是JavaBeans规范的一部分,用于在Java对象和字符串之间进行数据转换。在Spring中,属性编辑器被广泛应用于IoC容器,用于处理配置文件中的...

    浅谈Spring的属性编辑器的使用

    在Spring框架中,属性编辑器(PropertyEditor)是一个关键组件,它负责将配置文件中非标准格式的数据转换为JavaBean的可识别类型。属性编辑器是基于JavaBeans规范的,因此理解这个概念需要先了解JavaBean和JavaBeans...

    springmvc自定义属性编辑器和参数解析器

    在Spring MVC框架中,属性编辑器(PropertyEditor)和参数解析器(HandlerMethodArgumentResolver)是两个关键组件,用于处理数据转换和模型绑定的过程。它们是实现灵活性和扩展性的重要手段,尤其在处理用户输入...

    spring自定义编辑器

    在Spring框架中,自定义编辑器主要用于处理数据类型的转换问题,特别是在将用户输入的数据转换为Java对象时非常有用。例如,用户通过表单提交了一个日期格式的字符串,而我们需要将其转换为`java.util.Date`类型。...

    自定义属性编辑及Spring处理器映射

    java中的属性编辑器详细说明及Spring中AnnotationMethodHandlerAdapter说明和DefaultAnnotationHandlerMapping的说明及用法

    Spring视频教程(1)

    此外,"009_Spring属性编辑器.avi"和"011_Spring属性编辑器_日期格式可配置_多文件读取方式.avi"将讲解Spring属性编辑器的用法,如何处理复杂类型的属性注入,如日期格式化和文件操作。 "010_上午内容回顾.avi"是对...

    尚学堂Spring学习笔记

    1. 定义一个属性编辑器的类,这个类要继承Spring中的spring.beans.PropertyEditorSupport类。 2. 在Spring的配置文件中配置属性编辑器的bean。 3. 在需要注入Date类型属性的类的bean的配置文件中直接使用属性注入就...

    SPRING中文开发参考手册

    ##### 4.1 属性编辑器、数据绑定、校验与 BeanWrapper - **数据绑定**:Spring 提供了 DataBinder 类来进行数据绑定操作。 - **BeanWrapper**:用于访问和修改 Bean 的属性。 ##### 4.2 使用 DataBinder 进行数据...

    Spring-Reference_zh_CN(Spring中文参考手册)

    5. 校验,数据绑定,BeanWrapper,与属性编辑器 5.1. 简介 5.2. 使用Spring的Validator接口进行校验 5.3. 从错误代码到错误信息 5.4. Bean处理和BeanWrapper 5.4.1. 设置和获取属性值以及嵌套属性 5.4.2. 内建的...

    蜜蜂EL编辑器V3.6

    在实际应用中,蜜蜂EL编辑器V3.6可以帮助开发者更高效地编写和调试EL表达式,尤其是在处理JSP页面、JSF组件以及Spring MVC的视图逻辑时。它不仅简化了JavaBeans的访问,也降低了代码的复杂度,提高了代码的可读性...

    富文本编辑kindeditor使用 java 实现 spring mvc

    在编辑器的页面中,你需要创建一个元素,其action属性指向处理表单提交的Controller方法。 3. **编写Controller**:在Java代码中,创建一个Spring MVC的Controller类,定义一个接收POST请求的方法,该方法的参数...

    Spring中文帮助文档

    5. 校验,数据绑定,BeanWrapper,与属性编辑器 5.1. 简介 5.2. 使用Spring的Validator接口进行校验 5.3. 从错误代码到错误信息 5.4. Bean处理和BeanWrapper 5.4.1. 设置和获取属性值以及嵌套属性 5.4.2. 内建...

    Spring中属性注入详解

    Spring提供了一种名为属性编辑器(Property Editor)的机制,用于将配置文件中的字符串转换为对应的Java对象。这里我们自定义了一个`Date`类型的属性编辑器`DatePropertyEditor`: ```java import java.beans....

    yml编辑器eclipse插件(yamleditor)

    springboot流行用yml属性文件,由于其特殊的语法,没有编辑器可能容易写错,而察觉不到,导致程序出了问题都不知道问题出在哪里。 yaml Editor是eclipse应用商店推荐的一款yml编辑器,为避免在线安装过慢,特分享...

    SpringPropertyEditorDemo:演示使用自定义属性编辑器绑定Spring-MVC中用户定义的对象的集合

    3. **集合类型的处理**:在自定义属性编辑器中,我们需要解析用户提供的字符串,如逗号分隔的值,然后将其转化为对应的`User`对象。这可能涉及到反序列化,例如,将JSON字符串转换为`List&lt;User&gt;`。 4. **绑定到模型...

    spring结合Mina

    spring结合Mina的配置文件,设计到spring构造 属性编辑器

    Spring全家桶知识笔记.pdf

    此外,ConfigurableBeanFactory接口增强了IoC容器的可定制性,允许设置类装载器、属性编辑器等。 AutowireCapableBeanFactory接口定义了自动装配的机制,通过一定的规则将容器中的bean进行自动装配。...

Global site tag (gtag.js) - Google Analytics