扫码阅读
手机扫码阅读

@Autowired 为什么会被 IDEA 警告| 既生@Resource,何生@Autowired?

320 2024-07-18

我们非常重视原创文章,为尊重知识产权并避免潜在的版权问题,我们在此提供文章的摘要供您初步了解。如果您想要查阅更为详尽的内容,访问作者的公众号页面获取完整文章。

查看原文:@Autowired 为什么会被 IDEA 警告| 既生@Resource,何生@Autowired?
文章来源:
springboot葵花宝典
扫码关注公众号
@Autowired和@Resource的区别与推荐用法

@Autowired和@Resource的区别与推荐用法

1. @Resource和@Autowired的一些总结

1.1 @Resource和@Autowired来源

@Resource来源于JSR 250标准,于2006年发布,主要用于标记应用程序需要的资源,可应用于字段或方法。而@Autowired是Spring框架的注解,于2007年发布,是自动装配的一部分。

1.2 为什么Spring官方支持两个功能相似的注解

@Resource优先按名称注入,找不到名称时按类型注入;@Autowired直接按类型注入。Spring引入@Autowired是为了增加控制的灵活性,覆盖更多场景。

1.3 “粒度”是指什么?

@Resource倾向于按名称找特定资源,而@Autowired在类型范围内搜索匹配资源。它们的区别在于资源查找范围不同。

1.4 Spring为什么支持两个功能相似的注解

@Resource是标准化规范,兼容其他JSR-250框架,方便迁移;@Autowired是Spring特有,功能更灵活但依赖Spring容器。

1.5 Spring的区别对待

IDE对@Autowired使用时会推荐构造方法注入,而@Resource没有类似警告。原因在于@Autowired注入存在一些限制,如循环依赖问题、无法声明常量属性等。此外,@Resource是Java标准,兼容更多IoC容器。

2. @Autowired和@Resource推荐用法

@Resource适用于单一资源注入,而@Autowired适用于按类型匹配的资源注入,尤其是集合注入。

2.1 构造方法注入推荐使用

构造方法注入可以避免循环依赖问题,是最可靠的注入方式。代码示例如下:

    private final TutorialService tutorialService;
    public TutorialController(TutorialService tutorialService) {
        this.tutorialService = tutorialService;
    }
    

2.2 构造方法注入简化版

通过使用lombok的@RequiredArgsConstructor注解,可以自动生成构造器以简化代码编写。示例代码:

    @RestController
    @RequestMapping("tutorial")
    @RequiredArgsConstructor
    public class TutorialController {
        private final TutorialService tutorialService;
    }
    

2.3 set注入

set注入通过@Autowired作用于Setter方法上,而不是直接作用于成员变量。代码示例:

    @RestController
    @RequestMapping("tutorial")
    public class TutorialController {
        private TutorialService tutorialService;
        public void setTutorialService(TutorialService tutorialService) {
            this.tutorialService = tutorialService;
        }
    }
    

2.4 set注入简化版

通过使用@Setter注解的简化方式实现set方法注入,代码示例如下:

    @RestController
    @RequestMapping("tutorial")
    public class TutorialController {
        @Setter(onMethod_ = {@Autowired})
        private TutorialService tutorialService;
    }
    

如果您觉得本文不错,欢迎点赞、收藏或转发支持!

想要了解更多内容?

查看原文:@Autowired 为什么会被 IDEA 警告| 既生@Resource,何生@Autowired?
文章来源:
springboot葵花宝典
扫码关注公众号