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

  • 相关阅读:
    《Reinforcement Learning: An Introduction》第8章笔记
    Tomcat 的安装以及其中配置环境原理的详细说明
    AWS DynamoDB使用
    美国多ip站群vps的五大优势
    HackTheBox-Starting Point--Tier 2---Unified
    【微信小程序】关于小程序的协同工作与发布的工作流程
    Tableau 自定义调色板及应用全流程讲解【保姆级】
    双向链表的基本操作
    PDF格式转换为翻页电子书,这种形式太酷辣!
    set 和 map的区别
  • 原文地址:https://blog.csdn.net/SmallPig_Code/article/details/127095428