1、bean默认生成规范
在Spring的使用中,通过注解管理Bean是一种非常常见的配置方式,当组件被自动检测为扫描时,其bean名称由该BeanNameGenerator
扫描器已知的策略生成。默认情况下,注释(@Component
,@Repository
,@Service
和 @Controller
),其中包含一个名称value
,从而提供了名称,相应的bean定义。
value名称的生成规范:
1注解给出value值,bean名称为该用户给出value
2注解没有给出value值,如果类名开头存在多个大写字母,则bean命名为类名本身或者是包名加上类名;如果开头仅存在一个大写字母bean命名将类名首个大写字母转为小写
2、重写bean命名规范
如果由于多个自动检测到的组件具有相同的非限定类名而遇到命名冲突(即,具有相同名称但位于不同包中的类),可以配置一个BeanNameGenerator重写默认bean名生成规范。
方式:
实现 BeanNameGenerator
接口,并确保包括默认的no-arg构造函数
public class MyBeanName extends AnnotationBeanNameGenerator{
/*
如果想完全重写bean命名规范,可以实现BeanNameGenerator接口,重写generateBeanName方法,生成自己的规范
*/
/**
* 通过继承AnnotationBeanNameGenerator,重写buildDefaultBeanName方法也可以生成自己命名规范,
* AnnotationBeanNameGenerator是Spring默认给出的生成规范,本质上也是实现了BeanNameGenerator接口
*
* @param definition
* @return
*/
@Override
protected String buildDefaultBeanName(BeanDefinition definition) {
//默认生成规范
String s = super.buildDefaultBeanName(definition);
//生成的bean在默认的bean名前加上xx字符
return "xx"+s;
}
}
//配置方式一
@Configuration
@ComponentScan(nameGenerator = MyBeanName.class)
public class JavaConfig1 {
}
//配置方式二
<context:component-scan base-package="hu" name-generator="hu.MyBeanName"/>