org.springframework.context.annotation

Class AnnotationBeanNameGenerator

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


    public class AnnotationBeanNameGenerator
    extends java.lang.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 Detail

      • AnnotationBeanNameGenerator

        public AnnotationBeanNameGenerator()
    • Method Detail

      • generateBeanName

        public java.lang.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

        @Nullable
        protected java.lang.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(java.lang.String annotationType,
                                                    java.util.Set<java.lang.String> metaAnnotationTypes,
                                                    @Nullable
                                                    java.util.Map<java.lang.String,java.lang.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 java.lang.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 java.lang.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)