public abstract class

BeanFactoryUtils

extends Object
java.lang.Object
   ↳ org.springframework.beans.factory.BeanFactoryUtils

Class Overview

Convenience methods operating on bean factories, in particular on the ListableBeanFactory interface.

Returns bean counts, bean names or bean instances, taking into account the nesting hierarchy of a bean factory (which the methods defined on the ListableBeanFactory interface don't, in contrast to the methods defined on the BeanFactory interface).

Summary

Constants
String GENERATED_BEAN_NAME_SEPARATOR Separator for generated bean names.
Public Constructors
BeanFactoryUtils()
Public Methods
static String[] beanNamesForTypeIncludingAncestors(ListableBeanFactory lbf, Class type, boolean includeNonSingletons, boolean allowEagerInit)
Get all bean names for the given type, including those defined in ancestor factories.
static String[] beanNamesForTypeIncludingAncestors(ListableBeanFactory lbf, Class type)
Get all bean names for the given type, including those defined in ancestor factories.
static String[] beanNamesIncludingAncestors(ListableBeanFactory lbf)
Return all bean names in the factory, including ancestor factories.
static <T> T beanOfType(ListableBeanFactory lbf, Class<T> type, boolean includeNonSingletons, boolean allowEagerInit)
Return a single bean of the given type or subtypes, not looking in ancestor factories.
static <T> T beanOfType(ListableBeanFactory lbf, Class<T> type)
Return a single bean of the given type or subtypes, not looking in ancestor factories.
static <T> T beanOfTypeIncludingAncestors(ListableBeanFactory lbf, Class<T> type, boolean includeNonSingletons, boolean allowEagerInit)
Return a single bean of the given type or subtypes, also picking up beans defined in ancestor bean factories if the current bean factory is a HierarchicalBeanFactory.
static <T> T beanOfTypeIncludingAncestors(ListableBeanFactory lbf, Class<T> type)
Return a single bean of the given type or subtypes, also picking up beans defined in ancestor bean factories if the current bean factory is a HierarchicalBeanFactory.
static <T> Map<String, T> beansOfTypeIncludingAncestors(ListableBeanFactory lbf, Class<T> type, boolean includeNonSingletons, boolean allowEagerInit)
Return all beans of the given type or subtypes, also picking up beans defined in ancestor bean factories if the current bean factory is a HierarchicalBeanFactory.
static <T> Map<String, T> beansOfTypeIncludingAncestors(ListableBeanFactory lbf, Class<T> type)
Return all beans of the given type or subtypes, also picking up beans defined in ancestor bean factories if the current bean factory is a HierarchicalBeanFactory.
static int countBeansIncludingAncestors(ListableBeanFactory lbf)
Count all beans in any hierarchy in which this factory participates.
static boolean isFactoryDereference(String name)
Return whether the given name is a factory dereference (beginning with the factory dereference prefix).
static boolean isGeneratedBeanName(String name)
Return whether the given name is a bean name which has been generated by the default naming strategy (containing a "#..." part).
static String originalBeanName(String name)
Extract the "raw" bean name from the given (potentially generated) bean name, excluding any "#..." suffixes which might have been added for uniqueness.
static String transformedBeanName(String name)
Return the actual bean name, stripping out the factory dereference prefix (if any, also stripping repeated factory prefixes if found).
[Expand]
Inherited Methods
From class java.lang.Object

Constants

public static final String GENERATED_BEAN_NAME_SEPARATOR

Also: SpringBeans

Separator for generated bean names. If a class name or parent name is not unique, "#1", "#2" etc will be appended, until the name becomes unique.

Constant Value: "#"

Public Constructors

public BeanFactoryUtils ()

Also: SpringBeans

Public Methods

public static String[] beanNamesForTypeIncludingAncestors (ListableBeanFactory lbf, Class type, boolean includeNonSingletons, boolean allowEagerInit)

Also: SpringBeans

Get all bean names for the given type, including those defined in ancestor factories. Will return unique names in case of overridden bean definitions.

Does consider objects created by FactoryBeans if the "allowEagerInit" flag is set, which means that FactoryBeans will get initialized. If the object created by the FactoryBean doesn't match, the raw FactoryBean itself will be matched against the type. If "allowEagerInit" is not set, only raw FactoryBeans will be checked (which doesn't require initialization of each FactoryBean).

Parameters
lbf the bean factory
type the type that beans must match
includeNonSingletons whether to include prototype or scoped beans too or just singletons (also applies to FactoryBeans)
allowEagerInit whether to initialize lazy-init singletons and objects created by FactoryBeans (or by factory methods with a "factory-bean" reference) for the type check. Note that FactoryBeans need to be eagerly initialized to determine their type: So be aware that passing in "true" for this flag will initialize FactoryBeans and "factory-bean" references.
Returns
  • the array of matching bean names, or an empty array if none

public static String[] beanNamesForTypeIncludingAncestors (ListableBeanFactory lbf, Class type)

Also: SpringBeans

Get all bean names for the given type, including those defined in ancestor factories. Will return unique names in case of overridden bean definitions.

Does consider objects created by FactoryBeans, which means that FactoryBeans will get initialized. If the object created by the FactoryBean doesn't match, the raw FactoryBean itself will be matched against the type.

This version of beanNamesForTypeIncludingAncestors automatically includes prototypes and FactoryBeans.

Parameters
lbf the bean factory
type the type that beans must match
Returns
  • the array of matching bean names, or an empty array if none

public static String[] beanNamesIncludingAncestors (ListableBeanFactory lbf)

Also: SpringBeans

Return all bean names in the factory, including ancestor factories.

Parameters
lbf the bean factory
Returns
  • the array of matching bean names, or an empty array if none

public static T beanOfType (ListableBeanFactory lbf, Class<T> type, boolean includeNonSingletons, boolean allowEagerInit)

Also: SpringBeans

Return a single bean of the given type or subtypes, not looking in ancestor factories. Useful convenience method when we expect a single bean and don't care about the bean name.

Does consider objects created by FactoryBeans if the "allowEagerInit" flag is set, which means that FactoryBeans will get initialized. If the object created by the FactoryBean doesn't match, the raw FactoryBean itself will be matched against the type. If "allowEagerInit" is not set, only raw FactoryBeans will be checked (which doesn't require initialization of each FactoryBean).

Parameters
lbf the bean factory
type type of bean to match
includeNonSingletons whether to include prototype or scoped beans too or just singletons (also applies to FactoryBeans)
allowEagerInit whether to initialize lazy-init singletons and objects created by FactoryBeans (or by factory methods with a "factory-bean" reference) for the type check. Note that FactoryBeans need to be eagerly initialized to determine their type: So be aware that passing in "true" for this flag will initialize FactoryBeans and "factory-bean" references.
Returns
  • the matching bean instance
Throws
NoSuchBeanDefinitionException if 0 or more than 1 beans of the given type were found
BeansException if the bean could not be created

public static T beanOfType (ListableBeanFactory lbf, Class<T> type)

Also: SpringBeans

Return a single bean of the given type or subtypes, not looking in ancestor factories. Useful convenience method when we expect a single bean and don't care about the bean name.

Does consider objects created by FactoryBeans, which means that FactoryBeans will get initialized. If the object created by the FactoryBean doesn't match, the raw FactoryBean itself will be matched against the type.

This version of beanOfType automatically includes prototypes and FactoryBeans.

Parameters
lbf the bean factory
type type of bean to match
Returns
  • the matching bean instance
Throws
NoSuchBeanDefinitionException if 0 or more than 1 beans of the given type were found
BeansException if the bean could not be created

public static T beanOfTypeIncludingAncestors (ListableBeanFactory lbf, Class<T> type, boolean includeNonSingletons, boolean allowEagerInit)

Also: SpringBeans

Return a single bean of the given type or subtypes, also picking up beans defined in ancestor bean factories if the current bean factory is a HierarchicalBeanFactory. Useful convenience method when we expect a single bean and don't care about the bean name.

Does consider objects created by FactoryBeans if the "allowEagerInit" flag is set, which means that FactoryBeans will get initialized. If the object created by the FactoryBean doesn't match, the raw FactoryBean itself will be matched against the type. If "allowEagerInit" is not set, only raw FactoryBeans will be checked (which doesn't require initialization of each FactoryBean).

Note: Beans of the same name will take precedence at the 'lowest' factory level, i.e. such beans will be returned from the lowest factory that they are being found in, hiding corresponding beans in ancestor factories. This feature allows for 'replacing' beans by explicitly choosing the same bean name in a child factory; the bean in the ancestor factory won't be visible then, not even for by-type lookups.

Parameters
lbf the bean factory
type type of bean to match
includeNonSingletons whether to include prototype or scoped beans too or just singletons (also applies to FactoryBeans)
allowEagerInit whether to initialize lazy-init singletons and objects created by FactoryBeans (or by factory methods with a "factory-bean" reference) for the type check. Note that FactoryBeans need to be eagerly initialized to determine their type: So be aware that passing in "true" for this flag will initialize FactoryBeans and "factory-bean" references.
Returns
  • the matching bean instance
Throws
NoSuchBeanDefinitionException if 0 or more than 1 beans of the given type were found
BeansException if the bean could not be created

public static T beanOfTypeIncludingAncestors (ListableBeanFactory lbf, Class<T> type)

Also: SpringBeans

Return a single bean of the given type or subtypes, also picking up beans defined in ancestor bean factories if the current bean factory is a HierarchicalBeanFactory. Useful convenience method when we expect a single bean and don't care about the bean name.

Does consider objects created by FactoryBeans, which means that FactoryBeans will get initialized. If the object created by the FactoryBean doesn't match, the raw FactoryBean itself will be matched against the type.

This version of beanOfTypeIncludingAncestors automatically includes prototypes and FactoryBeans.

Note: Beans of the same name will take precedence at the 'lowest' factory level, i.e. such beans will be returned from the lowest factory that they are being found in, hiding corresponding beans in ancestor factories. This feature allows for 'replacing' beans by explicitly choosing the same bean name in a child factory; the bean in the ancestor factory won't be visible then, not even for by-type lookups.

Parameters
lbf the bean factory
type type of bean to match
Returns
  • the matching bean instance
Throws
NoSuchBeanDefinitionException if 0 or more than 1 beans of the given type were found
BeansException if the bean could not be created

public static Map<String, T> beansOfTypeIncludingAncestors (ListableBeanFactory lbf, Class<T> type, boolean includeNonSingletons, boolean allowEagerInit)

Also: SpringBeans

Return all beans of the given type or subtypes, also picking up beans defined in ancestor bean factories if the current bean factory is a HierarchicalBeanFactory. The returned Map will only contain beans of this type.

Does consider objects created by FactoryBeans if the "allowEagerInit" flag is set, which means that FactoryBeans will get initialized. If the object created by the FactoryBean doesn't match, the raw FactoryBean itself will be matched against the type. If "allowEagerInit" is not set, only raw FactoryBeans will be checked (which doesn't require initialization of each FactoryBean).

Note: Beans of the same name will take precedence at the 'lowest' factory level, i.e. such beans will be returned from the lowest factory that they are being found in, hiding corresponding beans in ancestor factories. This feature allows for 'replacing' beans by explicitly choosing the same bean name in a child factory; the bean in the ancestor factory won't be visible then, not even for by-type lookups.

Parameters
lbf the bean factory
type type of bean to match
includeNonSingletons whether to include prototype or scoped beans too or just singletons (also applies to FactoryBeans)
allowEagerInit whether to initialize lazy-init singletons and objects created by FactoryBeans (or by factory methods with a "factory-bean" reference) for the type check. Note that FactoryBeans need to be eagerly initialized to determine their type: So be aware that passing in "true" for this flag will initialize FactoryBeans and "factory-bean" references.
Returns
  • the Map of matching bean instances, or an empty Map if none
Throws
BeansException if a bean could not be created

public static Map<String, T> beansOfTypeIncludingAncestors (ListableBeanFactory lbf, Class<T> type)

Also: SpringBeans

Return all beans of the given type or subtypes, also picking up beans defined in ancestor bean factories if the current bean factory is a HierarchicalBeanFactory. The returned Map will only contain beans of this type.

Does consider objects created by FactoryBeans, which means that FactoryBeans will get initialized. If the object created by the FactoryBean doesn't match, the raw FactoryBean itself will be matched against the type.

Note: Beans of the same name will take precedence at the 'lowest' factory level, i.e. such beans will be returned from the lowest factory that they are being found in, hiding corresponding beans in ancestor factories. This feature allows for 'replacing' beans by explicitly choosing the same bean name in a child factory; the bean in the ancestor factory won't be visible then, not even for by-type lookups.

Parameters
lbf the bean factory
type type of bean to match
Returns
  • the Map of matching bean instances, or an empty Map if none
Throws
BeansException if a bean could not be created

public static int countBeansIncludingAncestors (ListableBeanFactory lbf)

Also: SpringBeans

Count all beans in any hierarchy in which this factory participates. Includes counts of ancestor bean factories.

Beans that are "overridden" (specified in a descendant factory with the same name) are only counted once.

Parameters
lbf the bean factory
Returns
  • count of beans including those defined in ancestor factories

public static boolean isFactoryDereference (String name)

Also: SpringBeans

Return whether the given name is a factory dereference (beginning with the factory dereference prefix).

Parameters
name the name of the bean
Returns
  • whether the given name is a factory dereference

public static boolean isGeneratedBeanName (String name)

Also: SpringBeans

Return whether the given name is a bean name which has been generated by the default naming strategy (containing a "#..." part).

Parameters
name the name of the bean
Returns
  • whether the given name is a generated bean name

public static String originalBeanName (String name)

Also: SpringBeans

Extract the "raw" bean name from the given (potentially generated) bean name, excluding any "#..." suffixes which might have been added for uniqueness.

Parameters
name the potentially generated bean name
Returns
  • the raw bean name

public static String transformedBeanName (String name)

Also: SpringBeans

Return the actual bean name, stripping out the factory dereference prefix (if any, also stripping repeated factory prefixes if found).

Parameters
name the name of the bean
Returns
  • the transformed name