开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第21天,点击查看活动详
大家好,我是bug郭,一名双非科班的在校大学生。对C/JAVA、数据结构、Spring系列框架、Linux及MySql、算法等领域感兴趣,喜欢将所学知识写成博客记录下来。 希望该文章对你有所帮助!如果有错误请大佬们指正!共同学习交流
作者简介:
- CSDN java领域新星创作者blog.csdn.net/bug..
- 掘金LV3用户 juejin.cn/user/bug..
- 阿里云社区专家博主,星级博主,developer.aliyun.com/bug..
- 华为云云享专家 bbs.huaweicloud.com/bug..
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"})