Class FluentPropertyBeanIntrospector
- java.lang.Object
-
- org.apache.commons.beanutils.FluentPropertyBeanIntrospector
-
- All Implemented Interfaces:
BeanIntrospector
public class FluentPropertyBeanIntrospector extends java.lang.Object implements BeanIntrospector
An implementation of the
BeanIntrospectorinterface which can detect write methods for properties used in fluent API scenario.A fluent API allows setting multiple properties using a single statement by supporting so-called method chaining: Methods for setting a property value do not return void, but an object which can be called for setting another property. An example of such a fluent API could look as follows:
public class FooBuilder { public FooBuilder setFooProperty1(String value) { ... return this; } public FooBuilder setFooProperty2(int value) { ... return this; } }Per default,
PropertyUtilsdoes not detect methods like this because, having a non-void return type, they violate the Java Beans specification.This class is more tolerant with regards to the return type of a set method. It basically iterates over all methods of a class and filters them for a configurable prefix (the default prefix is
set). It then generates correspondingPropertyDescriptorobjects for the methods found which use these methods as write methods.An instance of this class is intended to collaborate with a
DefaultBeanIntrospectorobject. So best results are achieved by adding this instance as customBeanIntrospectorafter theDefaultBeanIntrospectorobject. Then default introspection finds read-only properties because it does not detect the write methods with a non-void return type.FluentPropertyBeanIntrospectorcompletes the descriptors for these properties by setting the correct write method.- Since:
- 1.9
-
-
Field Summary
Fields Modifier and Type Field Description static java.lang.StringDEFAULT_WRITE_METHOD_PREFIXThe default prefix for write methods.private org.apache.commons.logging.LoglogThe logger.private java.lang.StringwriteMethodPrefixThe prefix of write methods to search for.
-
Constructor Summary
Constructors Constructor Description FluentPropertyBeanIntrospector()Creates a new instance ofFluentPropertyBeanIntrospectorand sets the default prefix for write methods.FluentPropertyBeanIntrospector(java.lang.String writePrefix)Creates a new instance ofFluentPropertyBeanIntrospectorand initializes it with the prefix for write methods used by the classes to be inspected.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description private java.beans.PropertyDescriptorcreateFluentPropertyDescritor(java.lang.reflect.Method m, java.lang.String propertyName)Creates a property descriptor for a fluent API property.java.lang.StringgetWriteMethodPrefix()Returns the prefix for write methods this instance scans for.voidintrospect(IntrospectionContext icontext)Performs introspection.private java.lang.StringpropertyName(java.lang.reflect.Method m)Derives the name of a property from the given set method.
-
-
-
Field Detail
-
DEFAULT_WRITE_METHOD_PREFIX
public static final java.lang.String DEFAULT_WRITE_METHOD_PREFIX
The default prefix for write methods.- See Also:
- Constant Field Values
-
log
private final org.apache.commons.logging.Log log
The logger.
-
writeMethodPrefix
private final java.lang.String writeMethodPrefix
The prefix of write methods to search for.
-
-
Constructor Detail
-
FluentPropertyBeanIntrospector
public FluentPropertyBeanIntrospector()
Creates a new instance ofFluentPropertyBeanIntrospectorand sets the default prefix for write methods.
-
FluentPropertyBeanIntrospector
public FluentPropertyBeanIntrospector(java.lang.String writePrefix)
Creates a new instance ofFluentPropertyBeanIntrospectorand initializes it with the prefix for write methods used by the classes to be inspected.- Parameters:
writePrefix- the prefix for write methods (must not be null)- Throws:
java.lang.IllegalArgumentException- if the prefix is null
-
-
Method Detail
-
createFluentPropertyDescritor
private java.beans.PropertyDescriptor createFluentPropertyDescritor(java.lang.reflect.Method m, java.lang.String propertyName) throws java.beans.IntrospectionExceptionCreates a property descriptor for a fluent API property.- Parameters:
m- the set method for the fluent API propertypropertyName- the name of the corresponding property- Returns:
- the descriptor
- Throws:
java.beans.IntrospectionException- if an error occurs
-
getWriteMethodPrefix
public java.lang.String getWriteMethodPrefix()
Returns the prefix for write methods this instance scans for.- Returns:
- the prefix for write methods
-
introspect
public void introspect(IntrospectionContext icontext) throws java.beans.IntrospectionException
Performs introspection. This method scans the current class's methods for property write methods which have not been discovered by default introspection.- Specified by:
introspectin interfaceBeanIntrospector- Parameters:
icontext- the introspection context- Throws:
java.beans.IntrospectionException- if an error occurs
-
propertyName
private java.lang.String propertyName(java.lang.reflect.Method m)
Derives the name of a property from the given set method.- Parameters:
m- the method- Returns:
- the corresponding property name
-
-