Spring 属性编辑器 – CustomEditorConfigurer示例

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

CustomEditorConfigurerCustomDateEditor配置

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

为什么选择CustomDateEditor

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

可以将CustomEditorConfigurer bean 声明到应用程序上下文中,如下所示:

beans.xml

<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

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

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

<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

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值被设置。