org.springframework.beans.factory.support
Class BeanDefinitionValueResolver

java.lang.Object
  extended by org.springframework.beans.factory.support.BeanDefinitionValueResolver

 class BeanDefinitionValueResolver
extends java.lang.Object

Helper class for use in bean factory implementations, resolving values contained in bean definition objects into the actual values applied to the target bean instance.

Operates on an AbstractBeanFactory and a plain BeanDefinition object. Used by AbstractAutowireCapableBeanFactory.

Since:
1.2
Author:
Juergen Hoeller
See Also:
AbstractAutowireCapableBeanFactory

Nested Class Summary
private static class BeanDefinitionValueResolver.KeyedArgName
          Holder class used for delayed toString building.
 
Field Summary
private  BeanDefinition beanDefinition
           
private  AbstractBeanFactory beanFactory
           
private  java.lang.String beanName
           
private  TypeConverter typeConverter
           
 
Constructor Summary
BeanDefinitionValueResolver(AbstractBeanFactory beanFactory, java.lang.String beanName, BeanDefinition beanDefinition, TypeConverter typeConverter)
          Create a BeanDefinitionValueResolver for the given BeanFactory and BeanDefinition.
 
Method Summary
private  java.lang.String adaptInnerBeanName(java.lang.String innerBeanName)
          Checks the given bean name whether it is unique.
protected  java.lang.Object evaluate(java.lang.Object value)
          Evaluate the given value as an expression, if necessary.
protected  java.lang.Object evaluate(TypedStringValue value)
          Evaluate the given value as an expression, if necessary.
private  java.lang.Object resolveInnerBean(java.lang.Object argName, java.lang.String innerBeanName, BeanDefinition innerBd)
          Resolve an inner bean definition.
private  java.lang.Object resolveManagedArray(java.lang.Object argName, java.util.List<?> ml, java.lang.Class elementType)
          For each element in the managed array, resolve reference if necessary.
private  java.util.List resolveManagedList(java.lang.Object argName, java.util.List<?> ml)
          For each element in the managed list, resolve reference if necessary.
private  java.util.Map resolveManagedMap(java.lang.Object argName, java.util.Map<?,?> mm)
          For each element in the managed map, resolve reference if necessary.
private  java.util.Set resolveManagedSet(java.lang.Object argName, java.util.Set<?> ms)
          For each element in the managed set, resolve reference if necessary.
private  java.lang.Object resolveReference(java.lang.Object argName, RuntimeBeanReference ref)
          Resolve a reference to another bean in the factory.
protected  java.lang.Class<?> resolveTargetType(TypedStringValue value)
          Resolve the target type in the given TypedStringValue.
 java.lang.Object resolveValueIfNecessary(java.lang.Object argName, java.lang.Object value)
          Given a PropertyValue, return a value, resolving any references to other beans in the factory if necessary.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

beanFactory

private final AbstractBeanFactory beanFactory

beanName

private final java.lang.String beanName

beanDefinition

private final BeanDefinition beanDefinition

typeConverter

private final TypeConverter typeConverter
Constructor Detail

BeanDefinitionValueResolver

public BeanDefinitionValueResolver(AbstractBeanFactory beanFactory,
                                   java.lang.String beanName,
                                   BeanDefinition beanDefinition,
                                   TypeConverter typeConverter)
Create a BeanDefinitionValueResolver for the given BeanFactory and BeanDefinition.

Parameters:
beanFactory - the BeanFactory to resolve against
beanName - the name of the bean that we work on
beanDefinition - the BeanDefinition of the bean that we work on
typeConverter - the TypeConverter to use for resolving TypedStringValues
Method Detail

resolveValueIfNecessary

public java.lang.Object resolveValueIfNecessary(java.lang.Object argName,
                                                java.lang.Object value)
Given a PropertyValue, return a value, resolving any references to other beans in the factory if necessary. The value could be:
  • A BeanDefinition, which leads to the creation of a corresponding new bean instance. Singleton flags and names of such "inner beans" are always ignored: Inner beans are anonymous prototypes.
  • A RuntimeBeanReference, which must be resolved.
  • A ManagedList. This is a special collection that may contain RuntimeBeanReferences or Collections that will need to be resolved.
  • A ManagedSet. May also contain RuntimeBeanReferences or Collections that will need to be resolved.
  • A ManagedMap. In this case the value may be a RuntimeBeanReference or Collection that will need to be resolved.
  • An ordinary object or null, in which case it's left alone.

    Parameters:
    argName - the name of the argument that the value is defined for
    value - the value object to resolve
    Returns:
    the resolved object

  • evaluate

    protected java.lang.Object evaluate(TypedStringValue value)
    Evaluate the given value as an expression, if necessary.

    Parameters:
    value - the candidate value (may be an expression)
    Returns:
    the resolved value

    evaluate

    protected java.lang.Object evaluate(java.lang.Object value)
    Evaluate the given value as an expression, if necessary.

    Parameters:
    value - the candidate value (may be an expression)
    Returns:
    the resolved value

    resolveTargetType

    protected java.lang.Class<?> resolveTargetType(TypedStringValue value)
                                            throws java.lang.ClassNotFoundException
    Resolve the target type in the given TypedStringValue.

    Parameters:
    value - the TypedStringValue to resolve
    Returns:
    the resolved target type (or null if none specified)
    Throws:
    java.lang.ClassNotFoundException - if the specified type cannot be resolved
    See Also:
    TypedStringValue.resolveTargetType(java.lang.ClassLoader)

    resolveInnerBean

    private java.lang.Object resolveInnerBean(java.lang.Object argName,
                                              java.lang.String innerBeanName,
                                              BeanDefinition innerBd)
    Resolve an inner bean definition.

    Parameters:
    argName - the name of the argument that the inner bean is defined for
    innerBeanName - the name of the inner bean
    innerBd - the bean definition for the inner bean
    Returns:
    the resolved inner bean instance

    adaptInnerBeanName

    private java.lang.String adaptInnerBeanName(java.lang.String innerBeanName)
    Checks the given bean name whether it is unique. If not already unique, a counter is added, increasing the counter until the name is unique.

    Parameters:
    innerBeanName - the original name for the inner bean
    Returns:
    the adapted name for the inner bean

    resolveReference

    private java.lang.Object resolveReference(java.lang.Object argName,
                                              RuntimeBeanReference ref)
    Resolve a reference to another bean in the factory.


    resolveManagedArray

    private java.lang.Object resolveManagedArray(java.lang.Object argName,
                                                 java.util.List<?> ml,
                                                 java.lang.Class elementType)
    For each element in the managed array, resolve reference if necessary.


    resolveManagedList

    private java.util.List resolveManagedList(java.lang.Object argName,
                                              java.util.List<?> ml)
    For each element in the managed list, resolve reference if necessary.


    resolveManagedSet

    private java.util.Set resolveManagedSet(java.lang.Object argName,
                                            java.util.Set<?> ms)
    For each element in the managed set, resolve reference if necessary.


    resolveManagedMap

    private java.util.Map resolveManagedMap(java.lang.Object argName,
                                            java.util.Map<?,?> mm)
    For each element in the managed map, resolve reference if necessary.