public class FieldHandler
extends java.lang.Object
Modifier and Type | Class and Description |
---|---|
private static class |
FieldHandler.FieldInfo |
private class |
FieldHandler.MapEntryImpl |
private static class |
FieldHandler.METHOD_TYPE |
private static class |
FieldHandler.NotFound
Final state of field couldn't be found or errors occured.
|
private static class |
FieldHandler.NotResolved
Initial state.
|
private static class |
FieldHandler.ParamType |
static class |
FieldHandler.ReferenceMethodImpl |
private static class |
FieldHandler.Resolved
Final state of field could be found and is valid.
|
private static interface |
FieldHandler.State
Internal state interface.
|
Modifier and Type | Field and Description |
---|---|
private java.lang.Class<?> |
componentClass
The component class.
|
private java.lang.reflect.Field |
field
The field used for the injection.
|
private ReferenceMetadata |
metadata
The reference metadata.
|
private FieldHandler.State |
state
State handling.
|
private FieldHandler.ParamType |
valueType
Value type.
|
Constructor and Description |
---|
FieldHandler(ReferenceMetadata metadata,
java.lang.Class<?> componentClass)
Create a new field handler
|
Modifier and Type | Method and Description |
---|---|
private static boolean |
accept(java.lang.reflect.Field field,
boolean acceptPrivate,
boolean acceptPackage)
Returns
true if the field is acceptable to be returned from the
#getField(Class, String, boolean, boolean, SimpleLogger) and also
makes the field accessible. |
boolean |
fieldExists(SimpleLogger logger) |
private java.lang.reflect.Field |
findField(SimpleLogger logger)
Finds the field named in the
#fieldName field in the given
targetClass . |
ReferenceMethod |
getBind() |
private java.lang.reflect.Field |
getField(java.lang.Class<?> clazz,
boolean acceptPrivate,
boolean acceptPackage,
SimpleLogger logger)
Finds the field named in the
#fieldName field in the given
targetClass . |
private java.lang.Object |
getFieldValue(java.lang.Object componentInstance) |
InitReferenceMethod |
getInit() |
static java.lang.String |
getPackageName(java.lang.Class<?> clazz)
Returns the name of the package to which the class belongs or an
empty string if the class is in the default package.
|
private java.util.Collection<java.lang.Object> |
getReplaceCollection(BindParameters bp) |
ReferenceMethod |
getUnbind() |
ReferenceMethod |
getUpdated() |
private java.lang.Object |
getValue(ComponentContextImpl key,
RefPair<?,?> refPair) |
private boolean |
initField(java.lang.Object componentInstance,
SimpleLogger logger) |
private static void |
setAccessible(java.lang.reflect.Field field) |
private void |
setField(FieldHandler.FieldInfo f,
SimpleLogger logger)
Set the field.
|
private void |
setFieldValue(java.lang.Object componentInstance,
java.lang.Object value) |
private MethodResult |
updateField(FieldHandler.METHOD_TYPE mType,
java.lang.Object componentInstance,
BindParameters bp,
SimpleLogger logger) |
private FieldHandler.FieldInfo |
validateField(java.lang.reflect.Field f,
SimpleLogger logger)
Validate the field, type etc.
|
private final ReferenceMetadata metadata
private final java.lang.Class<?> componentClass
private volatile java.lang.reflect.Field field
private volatile FieldHandler.ParamType valueType
private volatile FieldHandler.State state
public FieldHandler(ReferenceMetadata metadata, java.lang.Class<?> componentClass)
fieldName
- name of the fieldcomponentClass
- component classreferenceClassName
- service class nameprivate void setField(FieldHandler.FieldInfo f, SimpleLogger logger)
null
the state transitions to not found.f
- The field or null
.logger
- The loggerprivate java.lang.reflect.Field findField(SimpleLogger logger) throws java.lang.reflect.InvocationTargetException
#fieldName
field in the given
targetClass
. If the target class has no acceptable method
the class hierarchy is traversed until a field is found or the root
of the class hierarchy is reached without finding a field.logger
- null
if no acceptable field
can be found in the target class or any super class.java.lang.reflect.InvocationTargetException
- If an unexpected Throwable is caught
trying to find the requested field.private java.lang.reflect.Field getField(java.lang.Class<?> clazz, boolean acceptPrivate, boolean acceptPackage, SimpleLogger logger) throws SuitableMethodNotAccessibleException, java.lang.reflect.InvocationTargetException
#fieldName
field in the given
targetClass
. If the target class has no acceptable field
the class hierarchy is traversed until a field is found or the root
of the class hierarchy is reached without finding a field.targetClass
- The class in which to look for the methodacceptPrivate
- true
if private fields should be
considered.acceptPackage
- true
if package private fields should
be considered.logger
- null
if no acceptable field
can be found in the target class or any super class.java.lang.reflect.InvocationTargetException
- If an unexpected Throwable is caught
trying to find the requested field.SuitableMethodNotAccessibleException
private FieldHandler.FieldInfo validateField(java.lang.reflect.Field f, SimpleLogger logger)
f
- The fieldlogger
- The loggerFieldHandler.ParamType.ignore
if the field is not valid.private java.lang.Object getValue(ComponentContextImpl key, RefPair<?,?> refPair)
private boolean initField(java.lang.Object componentInstance, SimpleLogger logger)
private java.util.Collection<java.lang.Object> getReplaceCollection(BindParameters bp)
private MethodResult updateField(FieldHandler.METHOD_TYPE mType, java.lang.Object componentInstance, BindParameters bp, SimpleLogger logger) throws java.lang.reflect.InvocationTargetException
java.lang.reflect.InvocationTargetException
private void setFieldValue(java.lang.Object componentInstance, java.lang.Object value) throws java.lang.reflect.InvocationTargetException
java.lang.reflect.InvocationTargetException
private java.lang.Object getFieldValue(java.lang.Object componentInstance) throws java.lang.reflect.InvocationTargetException
java.lang.reflect.InvocationTargetException
private static boolean accept(java.lang.reflect.Field field, boolean acceptPrivate, boolean acceptPackage)
true
if the field is acceptable to be returned from the
#getField(Class, String, boolean, boolean, SimpleLogger)
and also
makes the field accessible.
This method returns true
if the field:
acceptPrivate
is true
acceptPackage
is true
field
- The field to checkacceptPrivate
- Whether a private field is acceptableacceptPackage
- Whether a package private field is acceptableprivate static void setAccessible(java.lang.reflect.Field field)
public static java.lang.String getPackageName(java.lang.Class<?> clazz)
public boolean fieldExists(SimpleLogger logger)
public ReferenceMethod getBind()
public ReferenceMethod getUnbind()
public ReferenceMethod getUpdated()
public InitReferenceMethod getInit()