publicinterfaceBeanNameGenerator{ /** * Generate a bean name for the given bean definition. * @param definition the bean definition to generate a name for * @param registry the bean definition registry that the given definition * is supposed to be registered with * @return the generated bean name */ String generateBeanName(BeanDefinition definition, BeanDefinitionRegistry registry);
/** * Default implementation of the {@link BeanNameGenerator} interface, delegating to * {@link BeanDefinitionReaderUtils#generateBeanName(BeanDefinition, BeanDefinitionRegistry)}. * * @author Juergen Hoeller * @since 2.0.3 */ publicclassDefaultBeanNameGeneratorimplementsBeanNameGenerator{
/** * A convenient constant for a default {@code DefaultBeanNameGenerator} instance, * as used for {@link AbstractBeanDefinitionReader} setup. * @since 5.2 */ publicstaticfinal DefaultBeanNameGenerator INSTANCE = new DefaultBeanNameGenerator();
String id = generatedBeanName; if (isInnerBean) { // Inner bean: generate identity hashcode suffix. id = generatedBeanName + GENERATED_BEAN_NAME_SEPARATOR + ObjectUtils.getIdentityHexString(definition); } else { // Top-level bean: use plain class name with unique suffix if necessary. return uniqueBeanName(generatedBeanName, registry); } return id; }
这里可以看出id是直接取的Bean的ClassName,如果是非内部类,会做唯一性校验
1 2 3 4 5 6 7 8 9 10 11 12
publicstatic String uniqueBeanName(String beanName, BeanDefinitionRegistry registry){ String id = beanName; int counter = -1;
// Increase counter until the id is unique. while (counter == -1 || registry.containsBeanDefinition(id)) { counter++; id = beanName + GENERATED_BEAN_NAME_SEPARATOR + counter; } return id; }