Spring中 bean的id和name的区别

在网上找了很多的文章,感觉说的好像跟我实际测试的结果不一样。
我用的4.0版本

在spring容器管理的Bean中,必须仅且只有一个无重复的ID。
不是语法这样,是请做到这样,因为这样会省去很多麻烦,避免出现问题。

然后,之前有人说id不能用特殊字符,name可以用特殊字符,但是我测试之后是都可以用特殊字符,并且也能取到bean,例如下面这个例子,根据id是可以取到这个bean。

<bean class="cn.dengbin97.test.bean.Bean3" id="#@t" name="mybean3, #mybean3"></bean>

然后是id不能重复,name可以重复,
我测试的id和name都可以重复,后面定义的会覆盖掉前面的
这个是建立在不同配置文件的,同一个配置文件中不能重复

//配置文件1,先加载
<bean class="cn.dengbin97.test.bean.Bean3" id="bean5"></bean>
//配置文件2,后加载
<bean class="cn.dengbin97.test.bean.Bean5" id="bean5"></bean>

//运行结果 false true 因为配置文件2中的bean5覆盖了前面的
//若交换加载顺序,则结果也会反过来
ApplicationContext ap = new 
ClassPathXmlApplicationContext("classpath:/applicationContext-service.xml", "classpath:/applicationContext-service2.xml");
        Object bean = ap.getBean("bean5");
        System.out.println(bean instanceof Bean3);
        System.out.println(bean instanceof Bean5);

然后如果配置是扫描包,加上了@Service或者@Controller等注解
会默认给上一个id ,类名首字母小写
不知道这个的优先级是不是低于配置文件,不管配置文件中扫描包和定义bean的顺序怎样的,最后都是扫描包被覆盖掉。

然后如果像下面这样写,会自动给个id,也就是全类名cn.dengbin97.test.bean.Bean3

<bean class="cn.dengbin97.test.bean.Bean3"></bean>

有人说只指定id或者只指定name,那么他们2个相等。。我不知道怎么测试

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值