• @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

  • 相关阅读:
    对话出海企业:2023亚马逊云科技出海日圆桌论坛
    前端-(1)
    如何在 Spring 或 Spring Boot 中使用键集分页
    服务器快速搭建AList集成网盘网站【宝塔面板一键部署AList】
    一文带你深入理解【Java基础】· 注解
    m基于VDLL的矢量型GPS信号跟踪算法matlab仿真
    springboot之异步任务、邮件任务、定时任务
    优维产品使用最佳实践:实例拓扑
    在Docker容器中修改PostgresSQL最大连接数
    Qt——对话框详解
  • 原文地址:https://blog.csdn.net/SmallPig_Code/article/details/127095428