spring bean id和bean name的区别

1. Spring bean defination

一般情况下,我们定义和应用bean都使用bean id,但是今天我遇到了这样的定义

Xml代码   收藏代码
  1. <bean id = "writeService" class = "aServiceImp, bServiceImp, cServiceImp"  
  2.            name = "aService, bService, cService"  init-method = "init">  
  3.            <property name = "interfaceName">  
  4.                      <value>baseService></value>  
  5.            </property>  
  6.            ............  
  7. </bean>  

 

这样的定义首先表明aService, bService, cService都implements interface baseService

用spring IOC注入的时候,既可以用id writeService,也可以用name aService/bService/cService

 

bean id 和 bean name到底有什么区别呢?

Google和百度都找不到我想要的答案,最后还是在spring的官网上找到了如下的解释,我自己理解为:bean name的定义是合法的,但是一个bean name不能唯一的代表一个bean,也就是多个bean可以拥有相同的bean name,但是bean id是唯一标示一个bean的,所以我们应该尽量避免用bean name来引用bean。

 

原文解释:

For a fallback match, the bean name is considered as a default qualifier value. This means that the bean may be defined with an id "main" instead of the nested qualifier element, leading to the same matching result. However, note that while this can be used to refer to specific beans by name, @Autowired  is fundamentally about type-driven injection with optional semantic qualifiers. This means that qualifier values, even when using the bean name fallback, always have narrowing semantics within the set of type matches; they do not semantically express a reference to a unique bean id. Good qualifier values would be "main" or "EMEA" or "persistent", expressing characteristics of a specific component - independent from the bean id (which may be auto-generated in case of an anonymous bean definition like the one above). 



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值