# Spring 属性编辑器 – `CustomEditorConfigurer`示例

> 原文： [https://howtodoinjava.com/spring-core/registering-built-in-property-editors-in-spring-4-customeditorconfigurer-example/](https://howtodoinjava.com/spring-core/registering-built-in-property-editors-in-spring-4-customeditorconfigurer-example/)

属性编辑器是 JavaBeans API 的一项功能，用于在文本值之间来回转换属性值。 每个属性编辑器仅设计用于某种类型的属性。 您可能希望使用属性编辑器来简化 bean 配置。 在本教程中，我们将学习在您的应用程序中配置 spring 的内置`CustomDateEditor`类。

## `CustomEditorConfigurer`和`CustomDateEditor`配置

通常，您将在使用容器之前在容器中注册一个属性编辑器。 `CustomEditorConfigurer`类被实现为内置的 bean 工厂后处理器，供您在实例化任何 bean 之前注册自定义属性编辑器。

#### 为什么选择`CustomDateEditor`

例如，在您的应用程序中，如果要将日期值从字符串格式转换为`java.util.Date`对象，反之亦然，则可以使用`CustomDateEditor`类。 Spring 附带的`CustomDateEditor`类用于将日期字符串转换为`java.util.Date`属性。

可以将`CustomEditorConfigurer` bean 声明到应用程序上下文中，如下所示：

`beans.xml`

```java
<bean class="org.springframework.beans.factory.config.CustomEditorConfigurer">
	<property name="propertyEditorRegistrars">
		<list>
			<bean class="com.howtodoinjava.demo.processors.CustomDateEditorRegistrar" />
		</list>
	</property>
</bean>

```

#### 注册/配置`CustomDateEditor`

从 **spring 4.x 开始**应该以以下方式声明`CustomDateEditorRegistrar`类。

`CustomDateEditorRegistrar.java`

```java
public class CustomDateEditorRegistrar implements PropertyEditorRegistrar 
{
    public void registerCustomEditors(PropertyEditorRegistry registry) 
	{
        registry.registerCustomEditor(Date.class, 
				new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"), false));
    }
}

```

## `CustomDateEditor`演示

现在，每次，当您以字符串格式（例如）传递 bean 属性值（类型`java.util.Date`）时， `2007-09-30`，它将自动转换为`Date`对象。

让我们测试配置。 为了测试，我创建了一个`EmployeeDTO` bean，其中一个日期字段为`dateOfBirth`。

```java
public class EmployeeDTO {

	private Integer id;
	private String firstName;
	private String lastName;
	private String designation;
	private Date dateOfBirth;

	//Setters and Getters

	@Override
	public String toString() {
		return "EmployeeDTO [id=" + id + ", firstName=" + firstName
				+ ", lastName=" + lastName + ", designation=" + designation
				+ ", dateOfBirth=" + dateOfBirth + "]";
	}
}

```

`applicationContext.xml`文件中的`Employee` bean 定义如下：

`applicationContext.xml`

```java
<bean class="org.springframework.beans.factory.config.CustomEditorConfigurer">
	<property name="propertyEditorRegistrars">
		<list>
			<bean class="com.howtodoinjava.demo.processors.CustomDateEditorRegistrar" />
		</list>
	</property>
</bean>

<!-- employeeDTO bean -->
<bean id="employeeDTO" class="com.howtodoinjava.demo.model.EmployeeDTO">
	<property name="firstName" value="Lokesh" />
	<property name="lastName" value="Gupta" />
	<property name="designation" value="Manager" />
	<property name="dateOfBirth" value="2007-09-30" />
</bean>

```

让我们从上下文中获取 bean。 应该在`dateOfBirth`字段中填充给定的日期值。

`TestSpringContext.java`

```java
public class TestSpringContext 
{
	@SuppressWarnings("resource")
	public static void main(String[] args) throws Exception 
	{
		ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");

		EmployeeDTO employeeDTO = (EmployeeDTO) context.getBean("employeeDTO");

		System.out.println(employeeDTO.getDateOfBirth());
	}
}

Output:

Sun Sep 30 00:00:00 IST 2007

```

很棒。`Date`值被设置。

学习愉快！