SpringIOC学习笔记(三)——重写注解命名规范

本文介绍了Spring中bean的默认生成规范,当使用注解管理Bean时,若未指定value,bean名称会根据类名生成。对于类名首字母大写的规则,bean名可能是类名本身或包名+类名。当遇到命名冲突时,可以通过实现`BeanNameGenerator`接口来重写bean的命名规则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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"/>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值