【开发日记】Spring中@Autowired和@Resource

19 篇文章 0 订阅
8 篇文章 0 订阅

区别

1- 提供方不同

1.1、@Autowired注解由Spring提供,所属包:

org.springframework.beans.factory.annotation

1.2、@Resource注解由JDK提供,所属包:

javax.annotation

2- 导入方式不同

2.1、@Autowired注解只能按照类型注入,如果需要使用此注解按名称注入的话则需要搭配@Qualifier来实现按名称注入。

2.2、@Resource注解默认使用名称注入,但也可以使用类型注入。

名称注入:

@Resource(name="AutowiredTestImpl1")
private AutowiredTest autowiredTest;

类型注入:

@Resource(type=AutowiredTest.class)
private AutowiredTest autowiredTest;

类型和名称同时指定:

@Resource(type=AutowiredTest.class,name = "AutowiredTestImpl1")
private AutowiredTest autowiredTest;

当类型与名称同时指定时,会找到唯一符合的bean进行注入。

强制注入

默认情况下,会在应用启动时@Autowired和@Resource注解会在IOC容器中查找相对应的Bean,如果没有则报错。

使用@Autowired注解可以设置非强制注入,该注解的required属性默认值为true,表示强制注入;将该属性值改为false后,在应用启动时如果有这个Bean就注入,没有就跳过,不会报错。

@Autowired(required = false)
private AutowiredTest autowiredTest;

多个符合条件的Bean

1- 问题

使用@Autowired时如果容器中有两个或两个以上的Bean符合注入条件,会报错如下:
expected single matching bean but found 2
表示期望一个Bean,但是找到两个。

2- 解决

2.1、使用@Primary注解设置主要Bean;当发现多个符合条件的Bean时,那么优先注入被@Primary注解的Bean。

@Component
@Primary
public class AutowiredTestImpl1 implements AutowiredTest...

2.2、配合@Qualifier注解,实现的效果如同使用@Resource对name和type都进行了设置。

@Autowired
@Qualifier("AutowiredTestImpl1")
private AutowiredTest autowiredTest;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

二饭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值