org.springframework.context.annotation
Class AnnotationBeanNameGenerator

java.lang.Object
  extended by org.springframework.context.annotation.AnnotationBeanNameGenerator
All Implemented Interfaces:
BeanNameGenerator

public class AnnotationBeanNameGenerator
extends Object
implements BeanNameGenerator

BeanNameGenerator implementation for bean classes annotated with the @Component annotation or with another annotation that is itself annotated with @Component as a meta-annotation. For example, Spring's stereotype annotations (such as @Repository) are themselves annotated with @Component.

Also supports JSR-330's Named annotation, if available.

If the annotation's value doesn't indicate a bean name, an appropriate name will be built based on the short name of the class (with the first letter lower-cased). For example:

com.xyz.FooServiceImpl -> fooServiceImpl

Since:
2.5
Author:
Juergen Hoeller, Mark Fisher
See Also:
Component.value(), Repository.value(), Service.value(), Controller.value(), Named.value()

Constructor Summary
AnnotationBeanNameGenerator()
           
 
Method Summary
protected  String buildDefaultBeanName(BeanDefinition definition)
          Derive a default bean name from the given bean definition.
protected  String determineBeanNameFromAnnotation(AnnotatedBeanDefinition annotatedDef)
          Derive a bean name from one of the annotations on the class.
 String generateBeanName(BeanDefinition definition, BeanDefinitionRegistry registry)
          Generate a bean name for the given bean definition.
protected  boolean isStereotypeWithNameValue(String annotationType, Set<String> metaAnnotationTypes, Map<String,Object> attributes)
          Check whether the given annotation is a stereotype that is allowed to suggest a component name through its annotation value().
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

AnnotationBeanNameGenerator

public AnnotationBeanNameGenerator()
Method Detail

generateBeanName

public String generateBeanName(BeanDefinition definition,
                               BeanDefinitionRegistry registry)
Description copied from interface: BeanNameGenerator
Generate a bean name for the given bean definition.

Specified by:
generateBeanName in interface BeanNameGenerator
Parameters:
definition - the bean definition to generate a name for
registry - the bean definition registry that the given definition is supposed to be registered with
Returns:
the generated bean name

determineBeanNameFromAnnotation

protected String determineBeanNameFromAnnotation(AnnotatedBeanDefinition annotatedDef)
Derive a bean name from one of the annotations on the class.

Parameters:
annotatedDef - the annotation-aware bean definition
Returns:
the bean name, or null if none is found

isStereotypeWithNameValue

protected boolean isStereotypeWithNameValue(String annotationType,
                                            Set<String> metaAnnotationTypes,
                                            Map<String,Object> attributes)
Check whether the given annotation is a stereotype that is allowed to suggest a component name through its annotation value().

Parameters:
annotationType - the name of the annotation class to check
metaAnnotationTypes - the names of meta-annotations on the given annotation
attributes - the map of attributes for the given annotation
Returns:
whether the annotation qualifies as a stereotype with component name

buildDefaultBeanName

protected String buildDefaultBeanName(BeanDefinition definition)
Derive a default bean name from the given bean definition.

The default implementation simply builds a decapitalized version of the short class name: e.g. "mypackage.MyJdbcDao" -> "myJdbcDao".

Note that inner classes will thus have names of the form "outerClassName.innerClassName", which because of the period in the name may be an issue if you are autowiring by name.

Parameters:
definition - the bean definition to build a bean name for
Returns:
the default bean name (never null)