|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object org.springframework.batch.support.DefaultPropertyEditorRegistrar org.springframework.batch.item.file.mapping.BeanWrapperFieldSetMapper<T>
public class BeanWrapperFieldSetMapper<T>
FieldSetMapper
implementation based on bean property paths. The
FieldSet
to be mapped should have field name meta data corresponding
to bean property paths in an instance of the desired type. The instance is
created and initialized either by referring to to a prototype object by bean
name in the enclosing BeanFactory, or by providing a class to instantiate
reflectively.
Nested property paths, including indexed properties in maps and collections,
can be referenced by the FieldSet
names. They will be converted to
nested bean properties inside the prototype. The FieldSet
and the
prototype are thus tightly coupled by the fields that are available and those
that can be initialized. If some of the nested properties are optional (e.g.
collection members) they need to be removed by a post processor.
To customize the way that FieldSet
values are converted to the
desired type for injecting into the prototype there are several choices. You
can inject PropertyEditor
instances directly through the
customEditors
property, or you can override
the createBinder(Object)
and initBinder(DataBinder)
methods, or you can provide a custom FieldSet
implementation.
Property name matching is "fuzzy" in the sense that it tolerates close
matches, as long as the match is unique. For instance:
Constructor Summary | |
---|---|
BeanWrapperFieldSetMapper()
|
Method Summary | |
---|---|
void |
afterPropertiesSet()
Check that precisely one of type or prototype bean name is specified. |
protected DataBinder |
createBinder(Object target)
Create a binder for the target object. |
protected void |
initBinder(DataBinder binder)
Initialize a new binder instance. |
T |
mapFieldSet(FieldSet fs)
Map the FieldSet to an object retrieved from the enclosing Spring
context, or to a new instance of the required type if no prototype is
available. |
void |
setBeanFactory(BeanFactory beanFactory)
|
void |
setPrototypeBeanName(String name)
The bean name (id) for an object that can be populated from the field set that will be passed into mapFieldSet(FieldSet) . |
void |
setStrict(boolean strict)
Public setter for the 'strict' property. |
void |
setTargetType(Class<? extends T> type)
Public setter for the type of bean to create instead of using a prototype bean. |
Methods inherited from class org.springframework.batch.support.DefaultPropertyEditorRegistrar |
---|
registerCustomEditors, setCustomEditors |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Constructor Detail |
---|
public BeanWrapperFieldSetMapper()
Method Detail |
---|
public void setBeanFactory(BeanFactory beanFactory)
setBeanFactory
in interface BeanFactoryAware
public void setPrototypeBeanName(String name)
mapFieldSet(FieldSet)
. Typically a
prototype scoped bean so that a new instance is returned for each field
set mapped.
Either this property or the type property must be specified, but not
both.
name
- the name of a prototype bean in the enclosing BeanFactorypublic void setTargetType(Class<? extends T> type)
mapFieldSet(FieldSet)
.
type
- the type to setpublic void afterPropertiesSet() throws Exception
afterPropertiesSet
in interface InitializingBean
IllegalStateException
- if neither is set or both properties are
set.
Exception
InitializingBean.afterPropertiesSet()
public T mapFieldSet(FieldSet fs)
FieldSet
to an object retrieved from the enclosing Spring
context, or to a new instance of the required type if no prototype is
available.
mapFieldSet
in interface FieldSetMapper<T>
fs
- the FieldSet
to map
NotWritablePropertyException
- if the FieldSet
contains a
field that cannot be mapped to a bean property.
BindingException
- if there is a type conversion or other error (if
the DataBinder
from createBinder(Object)
has errors
after binding).FieldSetMapper.mapFieldSet(FieldSet)
protected DataBinder createBinder(Object target)
DataBinder
and calls out to
initBinder(DataBinder)
and
DefaultPropertyEditorRegistrar.registerCustomEditors(PropertyEditorRegistry)
.
target
-
DataBinder
that can be used to bind properties to the
target.protected void initBinder(DataBinder binder)
direct field access
. Called by createBinder(Object)
.
Note that registration of custom property editors should be done in
DefaultPropertyEditorRegistrar.registerCustomEditors(PropertyEditorRegistry)
, not here! This
method will only be called when a new data binder is created.
binder
- new binder instancecreateBinder(Object)
public void setStrict(boolean strict)
mapFieldSet(FieldSet)
will fail of the FieldSet contains fields
that cannot be mapped to the bean.
strict
-
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |