Java - Spring一些细节

本文详细解读了Spring框架中bean的特殊命名规则,即当类名首字母和第二个字母大写时,bean名称会转换为驼峰命名。同时介绍了@Bean注解在@Controller类中的使用,以及它与@Configuration的区别。

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

一、bean 的特殊命名规则

当类名首字母和第二个字母都是大写的情况, bean 的命名规则为 "原类名"

查看源码

org/springframework/context/annotation/AnnotationBeanNameGenerator.java

的方法

protected String buildDefaultBeanName(BeanDefinition definition) {
    String beanClassName = definition.getBeanClassName();
    Assert.state(beanClassName != null, "No bean class name set");
    String shortClassName = ClassUtils.getShortName(beanClassName);
    return Introspector.decapitalize(shortClassName);
}
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);
}

注意这里

Character.isUpperCase(name.charAt(1)) && Character.isUpperCase(name.charAt(0))

所以,在程序中的

@Controller
public class UController {
    public void doUController() {
        System.out.println("do U Controller");
    }
}

id为原类名,并非是uController

二、Bean注解使用方式

@Controller
public class UserBean {
    @Bean
    public User user1() {
        // 构造测试数据
        User user = new User();
        user.setId(1);
        user.setName("张三");
        user.setId(19);
        return user;
    }
}

Bean注解是在被Controller注解标记的类中的,这样容器中也会有id为user1的bean

之前还一直以为只能在被Configuration注解标记的类中

原因:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值