Spring给Bean命名规则

806 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第21天,点击查看活动详

大家好,我是bug郭,一名双非科班的在校大学生。对C/JAVA、数据结构、Spring系列框架、Linux及MySql、算法等领域感兴趣,喜欢将所学知识写成博客记录下来。 希望该文章对你有所帮助!如果有错误请大佬们指正!共同学习交流

作者简介:

Spring给Bean命名规则

我们可以看到我们刚刚读取bean对象时,我们并不知道bean对象注册的id而是直接通过userController读取! 难道说Spring注册bean对象id为类名首字母小写,直接就小驼峰?

我们查看Spring源码验证!

在这里插入图片描述 我们顺藤摸瓜下方就是Spring对Bean对象进行命名的方法!

 public static String decapitalize(String name) {
        if (name == null || name.length() == 0) {
            return name;
        }
        if (name.length() > 1 && Character.isUpperCase(name.charAt(1)) &&
                        Character.isUpperCase(name.charAt(0))){
            return name;
        }
        char chars[] = name.toCharArray();
        chars[0] = Character.toLowerCase(chars[0]);
        return new String(chars);
    }

可以看到我们这里bean对象的id命名规则如下:

  • 对象类类名一般采用大驼峰的形式也就是单词第一个字母大小,所以Spring直接bean对象改为小驼峰,`第一个字母分成小写!
  • 对象类类名不规范,不是大驼峰,第二个字母和第一个字母都是大小!Spring直接将bean对象命名为类名!

我们进行验证: 在这里插入图片描述

方法注解@Bean

我们了解了5大类注解可以进行对象注册,我们使用方法注解进行对象注册! 注意: 方法注解要和类注解配合使用!

方法注解进行对象注册

//User类
public class User {
    private String name;
    private int id;
    public User(String name, int id) {
        this.name = name;
        this.id = id;
    }
    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", id=" + id +
                '}';
    }
}
//Users类
@Component
public class Users {
    @Bean
    public User user(){
        return new User("java",666);
    }
}

在这里插入图片描述 可以看到@Bean注解适用于返回值返回对象的方法中!

重命名Bean

我们既然可以通过五大类注解进行对象注入!那为何还要多此一举在方法上加上@Bean方法注解呢?

我们可以通过@Bean方法注解给bean对象重命名,可以直接设置名字!

通过 name={"rename1", "rename2"...}可以重命名多个!

@Component
public class Users {
    @Bean(name = {"user1"})
    public User user(){
        return new User("java",666);
    }
}

能否通过之前Spring给我们设置的名字访问? 不能 在这里插入图片描述 @Bean(name={"user1","user2"}) 重命名多个! 在这里插入图片描述 我们也可以将name省略 @Bean({"user1"}) 在这里插入图片描述

在这里插入图片描述