1、命名Spring Bean
- Bean名称
每个Bean拥有一个或多个标识符(identifiers),这些标识符在Bean所在的容器中必须是唯一的,但是并非整个应用中是唯一的。通常,一个Bean仅有一个标识符,如果需要额外的,可考虑使用别名(Alias)扩展。
在基于XML的配置元信息中,开发人员可用id 或者 name 属性类规定Bean的标识符。通常Bean的标识符有字母组成,允许出现特殊字符。如果想引入Bean的别名的话,可以在name属性使用半角逗号或分号来间隔。
Bean的id或name属性并非必须指定,如果留空的话,容器会为Bean自动生成一个唯一的名称。Bean的命名尽管没有限制,但是官方建议采用驼峰的方式,更符合Java的命名约定。
2、Bean 名称生成器(BeanNameGenerator)
- 由 Spring Framework 2.0.3 引入,框架内建两种实现:
DefaultBeanNameGenerator:默认通用 BeanNameGenerator实现
- AnnotationBeanNameGenerator:基于注解扫描的BeanNameGenerator实现,起始于Spring Framework 2.5
3、源码分析
DefaultBeanNameGenerator
从5.2开始,加入了单例,但是为了以前版本的兼容,高版本中单例模式并没有把默认的构造函数给私有化。
具体实现是委托给BeanDefinitionReaderUtils.generateBeanName(definition, registry);
AnnotationBeanNameGenerator