Spring高手之路-@Autowired和@Resource注解异同点

目录

相同点

不同点

1.来源不同。

2.包含的属性不同

3.匹配方式(装配顺序)不同。

​编辑

4.支持的注入对象类型不同

5.应用地方不同


相同点

  1. 都可以实现依赖注入,通过注解将需要的Bean自动注入到目标类中。
  2. 都可以用于注入任意类型的Bean,包括类、接口、原始类型、数组等。
  3. 都支持通过名称、类型匹配进行注入(@Autowired 注解默认按照类型匹配,而 @Resource 注解默认按照名称匹配
@Autowired
private Bean beanA;
@Resource
private Bean beanB;

在Spring容器中这两个注解功能基本是等价的,都可以将bean注入到对应的字段中。

不同点

虽然功能上看起来基本相同还是存在区别的下面从几个不同方面分析

1.来源不同。

@Autowired 是 Spring 框架提供的注解。

@Resource 是 JavaEE(现在的 JakartaEE)规范中定义的注解。

2.包含的属性不同

@Autowired 只包含一个参数:required,表示是否开启自动注入,默认是true。

@Resource 包含七个参数,其中最重要的两个参数是:name 和 type。

3.匹配方式(装配顺序)不同。

@Autowired 默认先按照类型进行自动装配,再是根据名称的方式。意思就是先在Spring容器中找以Bean为类型的Bean实例,如果找不到或者找到多个bean,则会进一步通过字段名称来找。当有多个同类型的 Bean 存在时,也可以通过 @Qualifier 注解指定具体的 Bean。

@Component
public class UserService {@Autowired@Qualifier("userRepository")//如果有多个同类型的Bean,可以使用@Qualifier注解指定具体的Beanprivate UserRepository userRepository;// ...
}

@Resource 和@Autowired恰好相反,先是按照名称方式,然后再是按照类型方式;当然,我们也可以通过注解中的参数显示指定通过哪种方式。如果有多个同名的Bean,可以使用@Resource注解的name属性指定具体的Bean

默认使用

@Component
public class UserService {@Resource//不指定任何属性private UserRepository userRepository;// ...
}

指定name

@Component
public class UserService {@Resource(name = "userRepository")//使用name属性指定具体的Beanprivate UserRepository userRepository;// ...
}

指定type

@Component
public class UserService {@Resource(type = UserRepository.class)//使用type属性指定Bean类型private UserRepository userRepository;// ...
}

指定name和type

@Component
public class UserService {@Resource(type = "UserRepository.class",name = "userRepository")//使用type属性指定Bean类型,name指定Bean名称private UserRepository userRepository;// ...
}

4.支持的注入对象类型不同

@Autowired 可以注入任何类型的对象,只要 Spring 容器中存在该类型的 Bean。

@Resource 注解可以用于注入 JNDI 名称(JNDI名称可以是任何字符串,但通常使用具有描述性的名称来标识资源。在应用程序中,可以使用JNDI名称来查找和绑定对象)或者默认按照名称匹配的 Bean

5.应用地方不同

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

@Resource能用在:类、成员变量和方法上。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/307377.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux开发工具——gdb篇

Linux下调试工具——gdb 文章目录 makefile自动化构建工具 gdb背景 gdb的使用 常用命令 总结 前言: 编写代码我们使用vim,编译代码我们使用gcc/g,但是我们,不能保证代码没问题,所以调试是必不可少的。与gcc/vim一样&…

【连接池】-从源码到适配(下),使用dynamic-datasource导致连接池没生效(升级版本)

写在前面 书接上文,连接池没生效,启用了一个什么默认的连接池。具体是什么,一起来看看源码吧。 目录 写在前面一、问题描述二、本地调试三、升级dynamic-datasource四、新的问题(一)数据源初始化问题(二&am…

ubuntu20部署Bringing-Old-Photos-Back-to-Life

环境准备: ubuntu20.04 Python 3.8.10 首先将微软的「Bringing-Old-Photos-Back-to-Life」库 clone 到本地: git clone https://github.com/microsoft/Bringing-Old-Photos-Back-to-Life.git cd Face_Enhancement/models/networks/ git clone https:/…

在Ant Design Vue(v1.7.8)a-table组件中实现余额自动计算

一、目标 在Ant Design Vue <a-table>表格中实现余额自动计算&#xff0c;公式为&#xff1a;剩余量 库存量 - 消耗量 二、二次开发基础 现有一个使用Ant Design Vue <a-table>表格的开源项目&#xff0c;原始表格有“消耗量”列&#xff0c;且带输入框&#xf…

【Maven】<scope>provided</scope>

在Maven中&#xff0c;“provided”是一个常用的依赖范围&#xff0c;它表示某个依赖项在编译和测试阶段是必需的&#xff0c;但在运行时则由外部环境提供&#xff0c;不需要包含在最终的项目包中。下面是对Maven scope “provided”的详细解释&#xff1a; 编译和测试阶段可用…

自定义docker镜像,ubuntu安装命令并导出

文章目录 问题现象解决步骤相关命令详细介绍docker save 与 docker loaddocker import 与 docker exportdocker commit 问题现象 我们的通讯服务&#xff0c;需要监测前端设备的在线情况&#xff08;是否在线、丢包率、延迟等&#xff09;&#xff0c;使用ping命令去实现此功能…

GBASE南大通用-Base 8a集群同步工具超详细指南 手把手带您玩转灾备

1工具介绍 GBase 8a集群间同步工具是基于集群的底层二进制数据同步的工具&#xff0c;其同步的对象是库内的数据&#xff0c;通过解析、对比智能索引中摘要信息的变化&#xff0c;来实现同构集群的同构表的数据复制功能&#xff0c;目前已经支持图形化操作&#xff0c;主要功能…

电脑报错“kernelbase.dll”文件缺失,软件游戏无法启动的解决方法

很多小伙伴留言说&#xff0c;每次自己要游戏或软件的时候&#xff0c;电脑就会弹出报错框&#xff0c;不知道应该怎么办&#xff1f; 其实&#xff0c;Windows报错提示已经说明了&#xff0c;程序找不到名为“kernelbase.dll”的文件&#xff0c;需要重新安装修复这个问题。 …

熊猫目标检测数据集VOC格式1200张

熊猫是中国的国宝&#xff0c;也是世界上最受人喜爱的动物之一。熊猫以其独特的外貌和与生俱来的文化象征意义而闻名于世。它们是一种大型的食草动物&#xff0c;主要分布在中国中部地区的竹林和高山地带。 熊猫的身形圆润笨拙&#xff0c;黑白分明&#xff0c;拥有圆润的脸庞…

Apipost一键压测参数化功能详解

最近更新中Apipost对UI页面进行了一些调整&#xff0c;另外一键压测功能支持参数化&#xff01;本篇文章将详细介绍这些改动&#xff01; API调试页面的细节改动 在请求区填入请求参数或脚本时会有相应的标识 如在Query中填入多个参数时上方会展示数量 在预、后执行脚本中写…

分享一个qml开发的Dialog

一、效果预览 二、源码分享 PopwindowWidget.qml import QtQuick import QtQuick.Controls import QtQuick.LayoutsApplicationWindow {id:selfwidth: 470height: 250visible: falsecolor: "#00000000"flags: Qt.Tool | Qt.FramelessWindowHint|Qt.MSWindowsFixedSiz…

REHL_用yum/dnf管理软件包

使用rpm安装包时经常会遇到一个问题就是包依赖&#xff0c;如下所示。 [rootRedHat ~]# rpm -ivh /mnt/AppStream/Packages/httpd-2.4.37-41.moduleel8.5.011772c8e0c271.x86_64.rpm 警告&#xff1a;/mnt/AppStream/Packages/httpd-2.4.37-41.moduleel8.5.011772c8e0c271.x86…