In Java, property editors are seldom used. Originally, they were meant for Swing applications to transform between model objects and their string representations on the GUI.
Spring found them another use: it’s typically what needs to be done when parsing a Spring beans definition file in order to create beans in the factory. Have you Spring users noticed you can set a number to a property and it is taken as such?
It’s because in every bean factory, there’re some editors registered by default. In fact, there are three kinds of editors:
- The first level consist of those default editors.
- If you need to go further, you can register editors provided by the Spring framework.
- Finally, you can also create your own editors.
The list of editors built-in, pre-registeredor not, is available in the Spring documentation.
For example, the LocaleEditor
is built-in and to use it, we only have to provide the correct locale string representation like so:
<bean id="dummy" class="ch.frankel.blog.spring.propertyeditor.Dummy">
<property name="locale" value="fr_FR" />
</bean>
Interestingly enough, some other editors are not well-known, like the PatternEditor
, although they are registered by default.
In order to register other property editors, whether built-in or homemade, just configure the customEditors
map property of the org.springframework.beans.factory.config.CustomEditorConfigurer
bean.
Note that the latter can safely remain anonymous.
The following configuration snippet adds a date property editor so that dates can easily be configured in beans definitions files.
<bean class="org.springframework.beans.factory.config.CustomEditorConfigurer">
<property name="customEditors">
<map>
<entry key="java.util.Date">
<bean class="org.springframework.beans.propertyeditors.CustomDateEditor">
<constructor-arg index="0">
<bean class="java.text.SimpleDateFormat">
<constructor-arg value="dd.MM.yyyy" />
</bean>
</constructor-arg>
<constructor-arg index="1" value="false" />
</bean>
</entry>
</map>
</property>
</bean>
Note that keys in the custom editors map are the wanted object type, meaning there can be only a single editor for each type - a good thing if there’s one.
Sources for this article can be found here in Eclipse/Maven format.