[Spring学习]08 @Resource和@Autowired注解的区别
创始人
2025-05-28 02:07:00
0

目录

  • 前言
  • 一、@Resource和@Autowired注解的身世
    • 1、@Resource注解
    • 2、@Autowired注解
    • 3、常见的三种依赖注入方式及区别
      • 1. Filed注入
      • 2. Setter注入
      • 3. Constructor注入
      • 4. 三种依赖注入方式的区别
  • 二、@Resource和@Autowired注解的区别
  • 三、@Resource和@Autowired注解的推荐用法


前言

当我们在属性上使用@Autowired的时候,IDEA会曝黄色的警告,如下图所示:

在这里插入图片描述
你如果问老员工应该怎么办时,一般会让你换成@Resource注解,问其原因,可能大部分人都不太讲的清楚。


一、@Resource和@Autowired注解的身世

要弄清楚,就要先了解@Resource和@Autowired注解的身世。

1、@Resource注解

@Resource注解,由2006年5月的 JSR 250(Java) 发布 。

@Resource注解的官方介绍:

1、标记了应用程序需要的资源。
2、可以应用于应用程序组件类或者组件类的字段或方法。
3、当应用于字段或方法时,容器将在组件初始化时将所请求资源的实例注入到应用程序组件中。
3、如果应用于组件类,则注释声明应用程序将在运行时查找的资源。

2、@Autowired注解

@Autowired注解,由2007年11月19日的 Spring2.5 发布。

@Autowired注解的官方介绍:

1、将构造函数、字段、设置方法或者配置方法标记为由 Spring 的依赖注入工具自动装配。

3、常见的三种依赖注入方式及区别

@Autowired注解IDEA为什么会曝黄色的警告?

警告的内容为:field injection is not recommended(不推荐使用Field注入),那应该推荐使用什么方式注入呢?

我们先来看下,常见的三种依赖注入方式:

1. Filed注入
2. Setter注入
3. 构造方法注入

1. Filed注入

属性方法(Filed)注入,此方式是使用最多的,因为这种方式使用起来非常简单,代码也非常的简洁。

@Controller
public class HelloController {@Autowiredprivate CourseService courseService;
}

2. Setter注入

普通方法(Setter)注入,就是先写Setter函数,然后在使用到的地方直接调用。

@Controller
public class HelloController {private CourseService courseService;@Autowiredpublic void setCourseService(CourseService courseService) {this.courseService = courseService;}
}

3. Constructor注入

构造方法(Constructor)注入,就是使用构造函数的方法实现。

@Controller
public class HelloController {private final CourseService courseService;@Autowiredpublic HelloController(CourseService courseService) {this.courseService = courseService;}
}

4. 三种依赖注入方式的区别

Filed注入,声明不了常量的属性,因为 final 的字段必须在类实例化时去实例化。

Filed注入,在类中很容易有很多依赖。

Filed注入,违反单一原则,当有多个依赖时,不容易看出依赖关系,容易循环依赖。

Filed注入,无法独立于容器之外实例化。

——————————————————————————————————————————————

Setter注入,实现可选依赖。

Setter注入,可以将依赖项部分注入。

Setter注入,可以解决循环依赖。

Setter注入,自己开发的模块推荐使用。

Setter注入,可变的。

——————————————————————————————————————————————

Constructor注入,实现强制依赖。

Constructor注入,只能将依赖项全部注入。

Constructor注入,为创建实例的第一选项。

Constructor注入,可以解决循环依赖。

Constructor注入,是Spring框架极力倡导使用的方式。

Constructor注入,不变的。

——————————————————————————————————————————————

所以,警告的内容为:field injection is not recommended(不推荐使用Field注入),那应该推荐使用什么方式注入呢?

答案是:在Spring框架里面,肯定是极力推荐 Constructor注入的方式。

由于此处使用的是 @Autowired 注解 Filed 注入,为了方便且不报错,所以把 @Autowired 注解改成 @Resource 注解 Filed 注入即可。


二、@Resource和@Autowired注解的区别

区别1:

身世不同:

  • @Autowired 出自 Spring 框架,只支持Spring框架。
  • @Resource 出自于Java标准:JSR-250,绝大部分框架都支持。

区别2:

注入方式不同:

  • @Autowired 支持 Filed 注入、Setter 注入和 Constructor 注入。
  • @Resource 只支持 Filed 注入和 Setter 注入。

区别3:

依赖查找顺序不同:

  • @Autowired 先根据类型,再根据名称查询。
  • @Resource 先根据名称,再根据类型查询。

区别4:

支持的参数不同:

  • @Autowired 只支持设置 1 个参数。
  • @Resource 支持设置 7 个参数。

三、@Resource和@Autowired注解的推荐用法

@Resource 倾向于确定性的单一资源。

@Autowired 为类型去匹配符合此类型的所有资源。

如集合注入,建议使用 @Autowired。

@Autowired 的推荐用法:

1)使用构造函数注入或者 lombok 的 @RequiredArgsConstructor+private final。

2)使用set注入或者 lombok 的 @Setter。

相关内容

热门资讯

小白网络安全学习2 简要目录;DVWA 靶场;XSS平台搭建;xss检测和利用;...
最新或2023(历届)珠海市内...  办理对象  群众  办理条件  一、申请条件及所需资料:(以下有关证件由派出所审核原件后收取复印件...
Vue基础23之路由第二节 Vue基础23路由路由的query参数src/router/index.jsDetail.vueHo...
最新或2023(历届)清远户口...  办理对象  需户口迁移人员  办理条件  符合政策规定的户口迁移  所需材料  无  窗口办理流程...
最新或2023(历届)重庆户口...  办理程序、时限及相关迁移手续:  (一)、区内迁移的,居民持相关手续到入户地派出所办理入户,手续齐...
最新或2023(历届)佛山三水...  办理对象  拟迁入本区的非本市户籍人员  办理条件  市外户籍人员在我市购买商品房(不含二手房和自...
最新或2023(历届)汕尾户口...  办理对象  群众  办理条件  1、购房入户  2、夫妻迁移入户  3、子女投靠父母  所需材料 ...
基础数论算法刷题笔记 理论 最小公倍数、最大公约数 (a+b)%n = a%n+b%n (ab)...
LeetCode 112. 路... LeetCode 112. 路径总和        给你二叉树的根节点 root 和一个表示目标和的...
最新或2023(历届)新生婴儿...   新生儿落户口办理程序:  1、用医院开具的孩子出生证明到当地的妇幼保健站开具正式的出生医学证明。...
最新或2023(历届)新生儿户...   新生儿申报户口须知:  一、办理条件 新生婴儿可按随父随母自愿的原则申报户口。非婚生育的新生婴儿...
新生儿落户办理户口时间限制,新...   新生儿作为国家未来的主体,国家在一些政策上也是有规定的,那么新生儿落户政策有哪些呢?新生儿在落户...
最新或2023(历届)深圳户口...  第一项——调干条件 根据 人事局颁布相关政策,调干的方式及条件分别为:  一、单调 1、享受国务院...
最新或2023(历届)毕业生办... 市民您好!感谢您对公安工作的支持与理解。根据您提出的问题,依据我市现行的户口政策,现答复如下:需本人...
TDK| 电源——反激变压器设... 电源参数根据功率、输入输出的情况,我们选择反激电源拓扑。反激式变压器的优点有:1、 电...
[个人笔记] 投影矩阵的导数计... [个人笔记] 投影矩阵的导数计算(1) 问题(2ÿ...
19.特殊工具与技术 文章目录特殊工具与技术19.1控制内存分配19.1.1重载new和deleteoperator ne...
最新或2023(历届)最新户口... 户口迁移手续[网友提问]人在北京上班三年,现在想在北京定居落户。可是户口还在老家湖南。想把湖南户口迁...
揭秘:春秋战国时代的美食 春秋... 我们今天再来说说春秋战国的饮食。新春佳节,寒冬腊月,三五好友,围坐于火锅旁,天南海北的胡侃,便是人生...
宁都起义简介 起义的环境,过程... 宁都起义,又名26路军起义,1931年(民国二十年)12月,在第二次国内革命战争中,国民革命军第26...