常用注解之@Resource和@Autowired区别对比

@Resource和@Autowired都是Spring容器在启动时做bean的自动注入时使用的

@Resource的用法

1、name和type都没有指定时,优先找name为当前变量名的bean,根据name找不到时则去找type为当前变量类型的bean

2、只使用name属性,则使用byName的自动注入策略,bean的name是不允许重复的

3、只使用type属性,则使用byType自动注入策略,从上下文中找到唯一的bean进行装配,找不到或是找到多个都会抛出异常

4、如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常

@Bean(name = "jobTrigger")
public CronTriggerFactoryBean cronJobTrigger(MethodInvokingJobDetailFactoryBean jobDetail) {
	//TODO
}
@Resource(name = "jobTrigger")
private CronTrigger cronTrigger;
//name和type都没有指定时,优先找name为restTemplate的bean,根据name找不到时则去找type为RestTemplate的bean
@Resource
private RestTemplate restTemplate;
@Resource(type = RestTemplate.class)
private RestTemplate restTemplate;
@Service("cService")
public class CommonServiceImpl implements ICommonService {
	//TODO
}

@Service("cService2")
public class CommonService2Impl implements ICommonService {
	//TODO
}
@Resource(name = "cService",type = ICommonService.class)
private ICommonService commonService;
//没有指定name和type时,优先找name为cService2的bean,根据name找不到时则去找type为ICommonService的bean
@Resource
private ICommonService cService2;

 @Autowired的用法

1、默认是按照类型装配依赖对象(等同于@Resource(type = ***.class))

2、要求依赖对象必须存在,如果依赖对象允许null值,可以设置它的required属性为false

3、如果我们想按照名称(等同于@Resource(name= "***"))来装配,可以结合@Qualifier注解一起使用

4、上述例子中的接口ICommonService如果不止CommonServiceImpl一个实现类时,装配接口类时会报错

      a、在其中一个实现类加@Primary注解,装配接口类会默认装配该实现类

      b、同3中在装配接口类时使用结合@Qualifier使用,指定唯一的实现类

      c、直接装配实现类

@Autowired
private CommonServiceImpl commonService;
@Autowired(required = false)
@Qualifier("cService")
private ICommonService commonService;
@Service("cService2")
@Primary
public class CommonService2Impl implements ICommonService {
	//TODO
}

//未指定Qualifier时默认加载CommonService2Impl,当CommonService2Impl未加Primary注解直接装配接口类会报错
@Autowired
private ICommonService commonService2;

//加载CommonServiceImpl则须指定Qualifier
@Autowired
@Qualifier("cService")
private ICommonService commonService;

@Autowired
public SMController(@Qualifier("cService2") ICommonService commonService) {
	this.commonService = commonService;
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值