SpringBoot的@Autowired和@Resource使用

发布时间 2023-05-17 14:10:24作者: C_C_菜园

1、区别

见:https://blog.csdn.net/xhbzl/article/details/126765893

2、使用

2.1、注入配置类

  • 比如注入config的bean
@Configuration
public class MyThymeLeafConfig {

    @Resource
    private ApplicationContext applicationContext;

    /** 自定义的bean
     */
    @Bean(name = "myTemplateEngine")
    public SpringTemplateEngine myTemplateEngine(){
        SpringTemplateEngine templateEngine = new SpringTemplateEngine();
        SpringResourceTemplateResolver templateResolver = myTemplateResolver();
        templateEngine.setTemplateResolver(templateResolver);
        templateEngine.setEnableSpringELCompiler(true);
        return templateEngine;
    }
  • 使用:@Autowired
    @Autowired
    @Qualifier("myTemplateEngine")
    private SpringTemplateEngine springTemplateEngine2Xml;
  • 使用:@Resource
    @Resource(name = "myTemplateEngine")
    private SpringTemplateEngine springTemplateEngine1Html;

上面两种使用方法是等价的。

2.2、注入业务类、实现类

  • 略……
  • 当只有一个Impl实类的时候,随便用哪个都差不多,>=2的时候,最好用@Resource,比@Autowired + @Qualifier()效率高

3、推荐使用@Resource

  • @Autowired
效率低下,先按类型查找,再按名字查找
  • @Resource
会先按byName去找,如果没找到则会byType去找。如果设置了name属性,则只会按byName去找,找不到就报错。速度快

按名字查找,后面要跟参数name,好处:当有多个Impl实现类时,可以通name快速找到
  • 总结
当只有一个Impl实类的时候,随便用哪个都差不多,>=2的时候,最好用@Resource,比@Autowired + @Qualifier()效率高