public class CustomEditorConfigurer extends Object implements BeanFactoryPostProcessor, Ordered
BeanFactoryPostProcessor
implementation that allows for convenient
registration of custom property editors
.
In case you want to register PropertyEditor
instances,
the recommended usage as of Spring 2.0 is to use custom
PropertyEditorRegistrar
implementations that in turn register any
desired editor instances on a given
registry
. Each
PropertyEditorRegistrar can register any number of custom editors.
<bean id="customEditorConfigurer" class="org.springframework.beans.factory.config.CustomEditorConfigurer"> <property name="propertyEditorRegistrars"> <list> <bean class="mypackage.MyCustomDateEditorRegistrar"/> <bean class="mypackage.MyObjectEditorRegistrar"/> </list> </property> </bean>
It's perfectly fine to register PropertyEditor
classes via
the customEditors
property. Spring will create fresh instances of
them for each editing attempt then:
<bean id="customEditorConfigurer" class="org.springframework.beans.factory.config.CustomEditorConfigurer"> <property name="customEditors"> <map> <entry key="java.util.Date" value="mypackage.MyCustomDateEditor"/> <entry key="mypackage.MyObject" value="mypackage.MyObjectEditor"/> </map> </property> </bean>
Note, that you shouldn't register PropertyEditor
bean instances via
the customEditors
property as PropertyEditors
are stateful
and the instances will then have to be synchronized for every editing
attempt. In case you need control over the instantiation process of
PropertyEditors
, use a PropertyEditorRegistrar
to register
them.
Also supports "java.lang.String[]"-style array class names and primitive
class names (e.g. "boolean"). Delegates to ClassUtils
for actual
class name resolution.
NOTE: Custom property editors registered with this configurer do
not apply to data binding. Custom editors for data binding need to
be registered on the DataBinder
:
Use a common base class or delegate to common PropertyEditorRegistrar
implementations to reuse editor registration there.
PropertyEditor
,
PropertyEditorRegistrar
,
ConfigurableBeanFactory.addPropertyEditorRegistrar(org.springframework.beans.PropertyEditorRegistrar)
,
ConfigurableBeanFactory.registerCustomEditor(java.lang.Class<?>, java.lang.Class<? extends java.beans.PropertyEditor>)
,
DataBinder.registerCustomEditor(java.lang.Class<?>, java.beans.PropertyEditor)
Modifier and Type | Field and Description |
---|---|
protected Log |
logger |
HIGHEST_PRECEDENCE, LOWEST_PRECEDENCE
Constructor and Description |
---|
CustomEditorConfigurer() |
Modifier and Type | Method and Description |
---|---|
int |
getOrder()
Get the order value of this object.
|
void |
postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory)
Modify the application context's internal bean factory after its standard
initialization.
|
void |
setCustomEditors(Map<Class<?>,Class<? extends PropertyEditor>> customEditors)
Specify the custom editors to register via a
Map , using the
class name of the required type as the key and the class name of the
associated PropertyEditor as value. |
void |
setOrder(int order) |
void |
setPropertyEditorRegistrars(PropertyEditorRegistrar[] propertyEditorRegistrars)
Specify the
PropertyEditorRegistrars
to apply to beans defined within the current application context. |
protected final Log logger
public void setOrder(int order)
public int getOrder()
Ordered
Higher values are interpreted as lower priority. As a consequence,
the object with the lowest value has the highest priority (somewhat
analogous to Servlet load-on-startup
values).
Same order values will result in arbitrary sort positions for the affected objects.
getOrder
in interface Ordered
Ordered.HIGHEST_PRECEDENCE
,
Ordered.LOWEST_PRECEDENCE
public void setPropertyEditorRegistrars(PropertyEditorRegistrar[] propertyEditorRegistrars)
PropertyEditorRegistrars
to apply to beans defined within the current application context.
This allows for sharing PropertyEditorRegistrars
with
DataBinders
, etc.
Furthermore, it avoids the need for synchronization on custom editors:
A PropertyEditorRegistrar
will always create fresh editor
instances for each bean creation attempt.
public void setCustomEditors(Map<Class<?>,Class<? extends PropertyEditor>> customEditors)
Map
, using the
class name of the required type as the key and the class name of the
associated PropertyEditor
as value.public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException
BeanFactoryPostProcessor
postProcessBeanFactory
in interface BeanFactoryPostProcessor
beanFactory
- the bean factory used by the application contextBeansException
- in case of errors