org.springframework.context.annotation

## Class AnnotationBeanNameGenerator

- java.lang.Object
- - 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 Java EE 6's `ManagedBean` and JSR-330's `Named` annotations, if available. Note that Spring component annotations always override such standard annotations.

  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

    Constructors
    Constructor and Description
    `AnnotationBeanNameGenerator()`

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `protected String` | `buildDefaultBeanName(BeanDefinition definition)` Derive a default bean name from the given bean definition.
    `protected String` | `buildDefaultBeanName(BeanDefinition definition, BeanDefinitionRegistry registry)` 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,
                                    BeanDefinitionRegistry registry)

      Derive a default bean name from the given bean definition.

      The default implementation delegates to `buildDefaultBeanName(BeanDefinition)`.

      Parameters:
        `definition` - the bean definition to build a bean name for
        `registry` - the registry that the given bean definition is being registered with
      Returns:
        the default bean name (never `null`)

    - #### 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`)