原文地址:http://howtodoinjava.com/spring/spring-core/registering-built-in-property-editors-in-spring-4-customeditorconfigurer-example/
A property editor is a feature of the JavaBeans API for converting property values to and from text values. Each property editor is designed for a certain type of property only. You may wish to employ property editors to simplify your bean configurations. In this tutorial, we will learn to configure spring’s build-in CustomDateEditor
class into your application.
CustomEditorConfigurer and CustomDateEditor configurations
Normally, you will register a property editor in the container before it may be used. The CustomEditorConfigurer
class is implemented as a built-in bean factory post processor for you to register your custom property editors before any of the beans get instantiated.
For example, in your application if you want to convert date values from string format to java.util.Date
objects or vice-versa, you can use CustomDateEditor
class. The CustomDateEditor
class that comes with Spring is for converting date strings into java.util.Date
properties.
A CustomEditorConfigurer
bean can be declared into application context as below:
<
bean
class
=
"org.springframework.beans.factory.config.CustomEditorConfigurer"
>
<
property
name
=
"propertyEditorRegistrars"
>
<
list
>
<
bean
class
=
"com.howtodoinjava.demo.processors.CustomDateEditorRegistrar"
/>
</
list
>
</
property
>
</
bean
>
|
CustomDateEditorRegistrar
class should be declared in below manner from spring 4.x onwards.
public
class
CustomDateEditorRegistrar
implements
PropertyEditorRegistrar
{
public
void
registerCustomEditors(PropertyEditorRegistry registry)
{
registry.registerCustomEditor(Date.
class
,
new
CustomDateEditor(
new
SimpleDateFormat(
"yyyy-MM-dd"
),
false
));
}
}
|
CustomDateEditor Example
Now everytime, when you pass a bean property value (of type java.util.Date
) in string format e.g. 2007-09-30, it will be automatically converted to date object.
Let’s Test the configuration. To test, I have created a EmployeeDTO
bean having one date field as 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 +
"]"
;
}
}
|
It’s bean definition in applicationContext.xml
file is as below:
<
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
>
|
Let’s fetch the bean from context. It should have it’s dateOfBirth filed populated with given date value.
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
|
Great. Date value is set.
Happy Learning !!