@Autowired 为什么会被 IDEA 警告| 既生@Resource,何生@Autowired?
![](/theme/default/default/images/main/eye-open.png)
我们非常重视原创文章,为尊重知识产权并避免潜在的版权问题,我们在此提供文章的摘要供您初步了解。如果您想要查阅更为详尽的内容,访问作者的公众号页面获取完整文章。
![](/theme/default/default/images/main/icon-jing.png)
摘要:@Autowired 警告和@Resource 对比
Spring框架中两个重要的依赖注入注解是@Resource和@Autowired。它们虽然功能相似,但却有各自的特点和使用场景。
1. 注解来源与区别
@Resource源自JSR 250规范,最初发布于2006年,它首先通过名称进行注入,如果找不到对应名称的bean,则尝试通过类型注入。
@Autowired是Spring 2.5在2007年引入的,主要通过类型进行注入。Spring官方支持这两个注解是因为@Autowired提供更细粒度的控制,而@Resource可以更容易地与其他遵循JSR-250规范的框架兼容。
2. Spring的区别对待
在属性上使用@Autowired会收到IDEA的警告,推荐使用构造器注入。这是因为属性注入可能会导致一些问题,例如忽视单一职责原则、循环依赖问题,以及强依赖于Spring容器。而@Resource作为Java标准,更具有通用性和兼容性。
3. 推荐用法
推荐使用@Resource进行确定性的单一资源注入,而@Autowired用于按类型在区域内匹配符合类型的所有资源,尤其适用于集合注入。构造方法注入是最为推荐的方式,可以避免循环依赖,并确保对象创建顺序的正确性。Lombok库提供的@RequiredArgsConstructor注解结合final字段可以简化构造方法注入的代码。set注入则使用@Autowired注解,但是应用于Setter方法而不是字段上。
4. 结语
本文对@Autowired和@Resource进行了对比分析,并解释了它们的推荐用法。这些知识有助于更好地理解和使用Spring框架进行依赖注入。
想要了解更多内容?
![](/theme/default/default/images/main/icon-jing.png)
![](https://cdn.easycorp.cn/rongpm/upload/202312/f_39217d624bb2b42ce8f6322ebd7e573a.png)
![](https://cdn.easycorp.cn/rongpm/upload/202312/f_39217d624bb2b42ce8f6322ebd7e573a.png)