@Resource和@Autowired的区别

经常我们会碰到有人注入使用@Resource,有人使用@Autowired,这里简单明了地总结一下两者的区别。

首先最大的区别,@Resource是Java提供的注解,而**@Autowired**则是Spring提供的注解:

@Resource
import javax.annotation.Resource;
@Autowired
import org.springframework.beans.factory.annotation.Autowired;

其次,两者自动注入查找的方式也不一样:

  • @Resource先按照byName去找,如果没有则会按照byType去找。当然,一旦你如果设置了name属性,那它只会根据byName去找,找不到就直接报错了。
  • @Autowired顺序相反,先按照byType去找,如果没有则按照byName去找。

最后应用场景和性能不一样:

@Autowired效率比较低,@Resource效率较高。

当接口只有一个实体类实例的时候,两者都差不多,但是当接口的实例超过1个的时候,我们需要根据名字去指定加载的接口实例的时候,使用**@Resource(name = “xxxx”')要比@Autowired组合@Qualifier**效率高很多…

举例:此时存在接口PersonService,但它存在两个实例ManSeviceImplWomanServiceImpl,我们就可以使用@Resource来指定接口实现的名字,从而保证注入的对应实例是我们需要的:

PersonService:

public interface PersonService {
    String run();
}

ManServiceImpl:

@Service("manService")
public class ManServiceImpl implements PersonService{
    @Override
    public String run() {
        return "man running...";
    }
}

WomanServiceImpl:

@Service("womanService")
public class WomanServiceImpl implements PersonService{
    @Override
    public String run() {
        return "woman running...";
    }
}

定义PersonController进行测试:

@RestController
public class PersonController {
    @Resource(name = "manService")
    private PersonService personService;

    @GetMapping("/person")
    public String testPerson() {
        return personService.run();
    }
}

postman测试结果:

image-20220921200831349.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值