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接口并提供默认实现,一般情况下,用户可以通过扩展这个方便类设计自己的属性编辑器。
分享到:
相关推荐
在Spring框架中,属性编辑器(PropertyEditor)是一种强大的工具,允许我们自定义类型转换过程。当我们需要将字符串形式的数据转换为Java对象时,属性编辑器就发挥了关键作用。例如,从请求参数或配置文件中读取的...
在Spring框架中,属性编辑器(PropertyEditor)扮演着至关重要的角色。它们是JavaBeans规范的一部分,用于在Java对象和其字符串表示之间进行转换。在Spring中,我们可以通过自定义属性编辑器来处理特定类型的值,...
一、Spring属性编辑器概述 Spring MVC和Spring Bean的初始化过程中,属性编辑器扮演着关键角色。当Spring尝试将配置文件中的属性值注入到Bean的属性时,如果该属性类型与配置值的类型不匹配,Spring会查找合适的...
在Spring框架中,属性编辑器(PropertyEditor)扮演着至关重要的角色。它们是JavaBeans规范的一部分,用于在Java对象和字符串之间进行数据转换。在Spring中,属性编辑器被广泛应用于IoC容器,用于处理配置文件中的...
在Spring框架中,属性编辑器(PropertyEditor)是一个关键组件,它负责将配置文件中非标准格式的数据转换为JavaBean的可识别类型。属性编辑器是基于JavaBeans规范的,因此理解这个概念需要先了解JavaBean和JavaBeans...
在Spring MVC框架中,属性编辑器(PropertyEditor)和参数解析器(HandlerMethodArgumentResolver)是两个关键组件,用于处理数据转换和模型绑定的过程。它们是实现灵活性和扩展性的重要手段,尤其在处理用户输入...
在Spring框架中,自定义编辑器主要用于处理数据类型的转换问题,特别是在将用户输入的数据转换为Java对象时非常有用。例如,用户通过表单提交了一个日期格式的字符串,而我们需要将其转换为`java.util.Date`类型。...
java中的属性编辑器详细说明及Spring中AnnotationMethodHandlerAdapter说明和DefaultAnnotationHandlerMapping的说明及用法
此外,"009_Spring属性编辑器.avi"和"011_Spring属性编辑器_日期格式可配置_多文件读取方式.avi"将讲解Spring属性编辑器的用法,如何处理复杂类型的属性注入,如日期格式化和文件操作。 "010_上午内容回顾.avi"是对...
1. 定义一个属性编辑器的类,这个类要继承Spring中的spring.beans.PropertyEditorSupport类。 2. 在Spring的配置文件中配置属性编辑器的bean。 3. 在需要注入Date类型属性的类的bean的配置文件中直接使用属性注入就...
##### 4.1 属性编辑器、数据绑定、校验与 BeanWrapper - **数据绑定**:Spring 提供了 DataBinder 类来进行数据绑定操作。 - **BeanWrapper**:用于访问和修改 Bean 的属性。 ##### 4.2 使用 DataBinder 进行数据...
5. 校验,数据绑定,BeanWrapper,与属性编辑器 5.1. 简介 5.2. 使用Spring的Validator接口进行校验 5.3. 从错误代码到错误信息 5.4. Bean处理和BeanWrapper 5.4.1. 设置和获取属性值以及嵌套属性 5.4.2. 内建的...
在实际应用中,蜜蜂EL编辑器V3.6可以帮助开发者更高效地编写和调试EL表达式,尤其是在处理JSP页面、JSF组件以及Spring MVC的视图逻辑时。它不仅简化了JavaBeans的访问,也降低了代码的复杂度,提高了代码的可读性...
在编辑器的页面中,你需要创建一个元素,其action属性指向处理表单提交的Controller方法。 3. **编写Controller**:在Java代码中,创建一个Spring MVC的Controller类,定义一个接收POST请求的方法,该方法的参数...
5. 校验,数据绑定,BeanWrapper,与属性编辑器 5.1. 简介 5.2. 使用Spring的Validator接口进行校验 5.3. 从错误代码到错误信息 5.4. Bean处理和BeanWrapper 5.4.1. 设置和获取属性值以及嵌套属性 5.4.2. 内建...
Spring提供了一种名为属性编辑器(Property Editor)的机制,用于将配置文件中的字符串转换为对应的Java对象。这里我们自定义了一个`Date`类型的属性编辑器`DatePropertyEditor`: ```java import java.beans....
springboot流行用yml属性文件,由于其特殊的语法,没有编辑器可能容易写错,而察觉不到,导致程序出了问题都不知道问题出在哪里。 yaml Editor是eclipse应用商店推荐的一款yml编辑器,为避免在线安装过慢,特分享...
3. **集合类型的处理**:在自定义属性编辑器中,我们需要解析用户提供的字符串,如逗号分隔的值,然后将其转化为对应的`User`对象。这可能涉及到反序列化,例如,将JSON字符串转换为`List<User>`。 4. **绑定到模型...
spring结合Mina的配置文件,设计到spring构造 属性编辑器
此外,ConfigurableBeanFactory接口增强了IoC容器的可定制性,允许设置类装载器、属性编辑器等。 AutowireCapableBeanFactory接口定义了自动装配的机制,通过一定的规则将容器中的bean进行自动装配。...