spring中通过注解注入bean的默认名字

        相信大家在学习spring中,经常用:@Component,@Controller,@Service,@Repository这些注解来替代在spring配置文件中来配置bean。

        在使用这些注解的时候,我们可以通过这些注解的value属性来设置bean的名称:

package com.zphsite.pojo;

import lombok.Data;
import org.springframework.stereotype.Component;

/**
 * @author zph
 * @date : 2022/11/20 21:18
 */
@Data
@Component("userBean") //不指定bean的名字默认是"user"
public class User {
    private String name;
    private int age;
    private String sex;
}

        然后我们通过一下代码可以从sprin容器中根据这个"userBean"名字调用getBean("userBean")从容器中获取bean。

package com.zphsite.spring;

import com.zphsite.pojo.User;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * @author zph
 * @date : 2022/11/20 21:20
 */
public class TestBean {

    @Test
    public void test(){
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring.xml");
        User userBean = applicationContext.getBean("userBean", User.class);
        System.out.println(userBean);
    }
}

但是如果我们使用注解的时候不给value赋值呢,那么这个beand名字又是什么呢,这个时候浅学过spring的同学会回答说:这个bean会有默认的名字就是,这个类名首字母小写就可以了

没错,这个同学回答对了一半,当我们的名字如果正常的驼峰命名的话确实就是首字母小写

但是我的类名是一下这个奇怪的名字呢?

package com.zphsite.pojo;

import org.springframework.stereotype.Component;

/**
 * @author zph
 * @date : 2022/11/20 22:06
 */
@Component
public class QIUGuanZhu {
    private String QIUQIULA;
}

OH NO!我不是首字母小写了吗,怎么回事呀!!!

 

好了,搞笑到此为止,就让我们去看看这个神圣的源码吧^_^

这是beanName生成的接口,有以下实现类 ()

 

我们重点关注AnnotationBeanNameGenerator这个实现类,他是为注解bean来生成名字的

在AnnotationBeanNameGenerator实现类中有一个方法buildDefaultBeanName就是用来生成默认名字的

而这方法里面最关键的就是最后一行代码(本文最关键的代码来了,其实看这里就可以了^_^)

        通过这个源码我们可以得出结论,如果你的类名的第一个和第二个字母是大写的话就直接返回类名作为默认bean的名称(这也就是前面QIUGuanZhu这个bean报错的原因),如果是正常的驼峰命名就是首字母小写即可。

        请观众老爷们点点关注^_^

 

 

 

 

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zph_coder

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值