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 PropertyEditor
s 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
PropertyEditor
s, 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