千家信息网

Spring中@Autowired与@Resource的区别有哪些

发表于:2026-11-04 作者:千家信息网编辑
千家信息网最后更新 2026年11月04日,本篇内容介绍了"Spring中@Autowired与@Resource的区别有哪些"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望
千家信息网最后更新 2026年11月04日Spring中@Autowired与@Resource的区别有哪些

本篇内容介绍了"Spring中@Autowired与@Resource的区别有哪些"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

一、定义

  • @Autowired

对类成员变量、方法及构造函数进行标注,完成自动装配的工作。

  • @Resource

在语义上被定义为通过其唯一的名称来标识特定的目标组件,其中声明的类型与匹配过程无关。

如果没有明确指定名称,则默认名称是从字段名称或设置方法(get、set方法)派生的。 如果用在字段上,则采用字段名称; 如果用在在setter方法,它采用其属性名称(例如setProperty()方法,取property做为属性名称)。

二、区别

在Spring框架中,如果在Service层中需要注入其他依赖的对象,通常我们都会使用@Autowired或者@Resource注解,但是它们是有区别的,比如@Autowired跟Spring框架强耦合了, 如果换成其他框架,@Autowired就没作用了。而@Resource是JSR-250提供的,它是Java标准,绝大部分框架都支持。

接下来,我们总结一下@Autowired和@Resource的区别:

(一)、包含的属性不同

@Autowired只包含一个参数:required,表示是否开启自动注入,默认是true。而@Resource包含七个参数,其中最重要的两个参数是:name 和 type。如下:

public @interface Autowired {     /**     * 是否开启自动注入,有些时候我们不想使用自动装配功能,可以将该参数设置成false。     */        boolean required() default true; }  public @interface Resource {    /**     * bean的名称     */    String name() default "";     String lookup() default "";     /**     * Java类,被解析为bean的类型     */    Class type() default java.lang.Object.class;     enum AuthenticationType {            CONTAINER,            APPLICATION    }     /**     * 身份验证类型     */    AuthenticationType authenticationType() default AuthenticationType.CONTAINER;     /**     * 组件是否可以与其他组件之间共享     */    boolean shareable() default true;     String mappedName() default "";     /**     * 描述     */    String description() default "";}

(二)、@Autowired默认按byType自动装配,而@Resource默认byName自动装配。

@Autowired如果要使用byName,需要使用@Qualifier一起配合。而@Resource如果指定了name,则用byName自动装配,如果指定了type,则用byType自动装配。

(三)、注解应用的地方不同

@Autowired能够用在:构造器、方法、参数、成员变量和注解上,而@Resource能用在:类、成员变量和方法上。

(四)、出处不同

@Autowired是Spring定义的注解,而@Resource是JSR-250定义的注解。所以@Autowired只能在Spring框架下使用,而@Resource则可以与其他框架一起使用。

(五)、装配顺序不同

@Autowired的装配顺序如下:

@Autowired默认先按byType进行匹配,如果发现找到多个bean,则又按照byName方式进行匹配,如果还有多个,则报出异常。

@Resource的装配顺序如下:

如果同时指定了name和type,流程如下:

如果指定了name,流程如下:

只是指定了@Resource注解的name,则按name后的名字去bean元素里查找有与之相等的name属性的bean。

如果指定了type,流程如下:

只指定@Resource注解的type属性,则从上下文中找到类型匹配的唯一bean进行装配,找不到或者找到多个,都会抛出异常。

如果既没有指定name,也没有指定type,流程如下:

既不指定name属性,也不指定type属性,则自动按byName方式进行查找。如果没有找到符合的bean,则回退为一个原始类型进行进行查找,如果找到就注入。

"Spring中@Autowired与@Resource的区别有哪些"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

装配 名称 属性 方法 注解 框架 参数 类型 不同 流程 变量 多个 字段 成员 组件 顺序 接下来 内容 方式 更多 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网金融科技 互联网是第几次科技革命的成果 互联网科技巨头监管 A股互联网金融科技公司 互联网金融与金融科技 互联网金融 科技金融 宜安科技 互联网金融 互联网科技公司招聘 安控科技rtu产品工业互联网 云创客互联网科技公司 江阴互联网智能科技产品进口 乌鲁木齐新华智原互联网科技学校 特约风豹互联网科技为什么扣费 科技互联网的核心竞争力 黑云互联网科技有限公司 互联网科技融合创新 互联网领先科技活动 互联网时代高科技布局 科技和互联网行业的特点 如何强化互联网金融科技 互联网科技与金融科技 互联网高科技股票 栖莱科技互联网股份有限公司 山东有哪些互联网科技公司 每天都有哪些好的互联网科技 广州智享互联网科技 艺电能源互联网科技有限公司招聘 互联网科技和医药行业 科技互联网公司两年变化 数字科技和互联网金融哪个好
0