Spring注入bean的几个注解@Autowired、@Qualifier、@Inject、@Named、@Resource

在Spring中将bean交给IOC容器常用的几个注解

  • @Autowired
  • @Qualifier
  • @Named
  • @Resource
  • @Inject
Spring自动装配的四种类型
  • byName就是会将与属性的名字一样的bean进行装配。

  • byType就是将同属性一样类型的bean进行装配。

  • constructor就是通过构造器来将类型与参数相同的bean进行装配。

  • autodetect是constructor与byType的组合,会先进行constructor,如果不成功,再进行byType。

Spring提供支持

@Autowired
  • @Autowired注解是byType类型的,这个注解可以用在属性上面,setter方面上面以及构造器上面。
  • 使用这个注解时,就不需要在类中为属性添加setter方法了。但是这个属性是强制性的,也就是说必须得装配上,如果没有找到合适的bean能够装配上,就会抛出异常NoSuchBeanDefinitionException。这时可以使用required=false来允许可以不被装配上,如果required=false时,则不会抛出异常。另一种情况是同时有多个bean是一个类型的,也会抛出这个异常。此时需要进一步明确要装配哪一个Bean,这时可以组合使用@Qualifier注解,值为Bean的名字即可。
@Qualifier
  • @Qualifier注解使用byName进行装配,这样可以在多个类型一样的bean中,明确使用哪一个名字的bean来进行装配。@Qualifier注解起到了缩小自动装配候选bean的范围的作用。

JavaEE提供支持

@Inject
  • @Inject注解与 @Autowired注解功能类似,搭配 @Name使用。
@Named
  • @Named注解与 @Qualifier注解功能类似,用于指定BeanName。
@Resource
  • 如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常。
  • 如果指定了name,则从上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常。
  • 如果指定了type,则从上下文中找到类似匹配的唯一bean进行装配,找不到或是找到多个,都会抛出异常。
  • 如果既没有指定name,又没有指定type,则自动按照byName方式进行装配;如果没有匹配,则回退为一个原始类型进行匹配,如果匹配则自动装配。

参考文章:https://blog.csdn.net/ZHAOJING1234567/article/details/90437192

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值