@Autowired和@Resourse关键字的区别

  这个问题是平时我们面试时面试官非常喜欢问的一个问题。首先,@Resourse是javax.annother包提供的一个注解关键字,是Java EE的方法,但Spring也支持该注解的导入,而@Autowired是Spring提供的关键字。

  它们的共同点是都是用来装配Java Bean的(这是一句废话哈哈哈),两者都可以写在字段或者是setter方法上,如果加在字段上,那对应的字段就不需要再添加setter方法了。两者也都可以配合@Component关键字来使用,在ApplicationContext.xml加入如下配置后(基包后面根据实际情况填自己需要Spring扫描的包名),可以加在普通pojo类上,效果相当于<Bean id="******" class="*******">,直接将普通的pojo实例化到Spring容器中。

<context:component-scan base-package=”******”> 

  但他们的差异也是显著的。首先,@Resourse关键字是byName的,也就是根据JNDI名称来装配Bean,其不关心Bean的类,例如,Spring想找一个叫做小明的人,@Resourse只会去寻找小明,而它不关心小明到底是一个男人还是一个女人。而@Autowired是byType的,刚好与@Resourse相反,@Autowired只关心Bean的类型,而不关心这个Bean到底叫什么。如果存在多个同样类型的Bean,就会报出BeanCreationException的错误,要解决这个问题,可以修改如下配置,此时@Autowired关键字也会变成byName,但这种方法不是很推荐。

<beans default-autowire="byName"/>

  此处我们应当使用另一种方法,使用@Qualifier关键字,@Qualifier(*****)来让Spring根据Bean的名称来进行装配。此外,@Resourse可以使用复数形式@Resourses来装配多个Bean。

转载于:https://www.cnblogs.com/CNty/p/10897969.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值