@Autowire和@resource的区别

news/2024/2/28 11:37:08

说明:

   @Autowired 和 @Resource 都是 Spring 框架中的注解,用于实现依赖注入(Dependency Injection,DI)。

区别:

  1. 来源不同:@Autowired 来自 Spring IoC 容器,而 @Resource 来自于 Java 。@Autowired 通常从构造器方法中的参数获取依赖,而 @Resource 则是从另一个类中注入。
  2. 依赖查找顺序不同:@Autowired 是先按类型(byType)查找,如果存在多个 Bean,再按名称(byName)进行查找;而 @Resource 是先按名称(byName)查找,如果存在多个 Bean,再按类型(byType)进行查找。
  3. 支持的参数不同:@Autowired 支持参数为 null,而 @Resource 不支持。@Autowired 可以接受多个参数,用于指定多个需要注入的对象;而 @Resource 只能接受单个参数,用于指定需要注入的特定属性或方法。
  4. @Autowired默认按类型装配,默认情况下必须要求依赖对象必须存在,如果要允许null值,可以设置它的required属性为false
  5. 方法作用不同:@Autowired 用于自动装配 Bean,而 @Resource 用于将一个类的属性或方法注入到另一个类中。

注意@Autowire@Qualifier配合使用效果也是和@Resource一样。


@Autowired(required = false) @Qualifier("commonExecutorPool")
private ExecutorService commonExecutorPool;@Resource(name = "commonExecutorPool")
private ExecutorService commonExecutorPool;

@resource注解通常用于以下场景:

  1. 定义一个 Spring Bean,该 Bean 依赖于其他 Bean。
  2. 通过注解配置 Bean,避免编写冗长的字符串或使用大括号等占位符。
  3. 当需要在多个组件之间共享数据源时,可以使用 @Resource 注解指定共享资源。
  4. 当需要注入一个可序列化的对象(如文件、数据库连接等)时,可以使用 @Resource 注解将其注入到方法或属性上,实现依赖的自动注入。
  5. 当需要自定义一个可复用的组件时,可以使用 @Resource 注解定义一个共享的静态资源。

总结:  

   @Autowired 主要用于自动装配 Bean,而 @Resource 主要用于将一个类的属性或方法注入到另一个类中,实现依赖注入。总之,@Resource  注解可以帮助我们简化 Bean 依赖、注入数据源等操作,提高开发效率和代码质量。同时,在使用过程中,也需要根据具体情况选择合适的使用场景和方式,以发挥其最大的价值。


http://www.ppmy.cn/news/58761.html

相关文章

『Linux』第九讲:Linux多线程详解(二)_ 线程控制

「前言」文章是关于Linux多线程方面的知识,上一篇是 Linux多线程详解(一),今天这篇是 Linux多线程详解(二),讲解会比较细,下面开始! 「归属专栏」Linux系统编程 「笔者」…

等保2.0存在的问题

等保制度和技术要求 国家信息安全等级保护制度(二级)相关要求包含技术要求和管理要求,技术要求包含:物理安全、网络安全、主机安全、应用安全及数据安全及备份恢复;管理要求包含:安全管理机构、安全管理制度、人员安全管理、系统建设管理、系统运维管理。 一、 技术要求 …

CSS布局基础(CSS浮动)

CSS布局基础(CSS浮动) CSS浮动浮动元素表现出行内块特点布局原则浮动布局重点清除浮动清除浮动时机 CSS浮动 float: none(默认,不浮动)|left|right;默认情况,所有元素都摊平在一个平面上,按照顺序依次排列 浮动则是将…

工程化:vite4和vue3里面的toast组件封装及命令式调用

在vue项目中我们要创建命令式的提示框,比如elementui里面都是this. m e s s a g e , t h i s . message,this. message,

Chapter4:频率响应法(中)

第四章:频率响应法 Exercise4.13 已知控制系统的开环对数幅频渐近特性如下,确定各最小相位系统的开环传递函数。 解: 【图 ( a ) ({\rm a}) (a)】 确定系统积分环节或微分环节个数。 因为对数幅频渐近特性曲线的低频渐近线的斜率为

【redis】redis的缓存过期淘汰策略

【redis】redis的缓存过期淘汰策略 文章目录 【redis】redis的缓存过期淘汰策略前言一、面试题二、redis内存满了怎么办?1、redis默认内存是多少?在哪查看?如何修改?在conf配置文件中可以查看 修改,内存默认是0redis的默认内存有…

Electron 环境搭建

https://start.spring.io/ 在线数据分析网站 https://tj.aldwx.com/ https://www.spsspro.com/ win10如何分屏 拖到边缘 Electron 环境搭建 https://www.electronjs.org/zh/docs/latest/tutorial/%E6%89%93%E5%8C%85%E6%95%99%E7%A8%8B electron 隐藏菜单 electron 标题栏 设…

3.4 只读存储器

学习目标: 学习只读存储器(ROM)的目标可以包括以下内容: 了解ROM的基本概念、分类以及适用场景。掌握ROM的电路原理、逻辑结构和读取方式。熟悉ROM的编程方式和编程工具。理解ROM与EPROM、EEPROM和闪存的区别和联系。了解ROM在计…

从零开始学架构——异地多活架构

业务高可用的保障:异地多活架构 无论是高可用计算架构,还是高可用存储架构,其本质的设计目的都是为了解决部分服务器故障的场景下,如何保证系统能够继续提供服务。但在一些极端场景下,有可能出现所有服务器都出现故障…

【redis】redis红锁Redlock算法和底层源码分析

【redis】redis红锁Redlock算法和底层源码分析 文章目录 【redis】redis红锁Redlock算法和底层源码分析前言一、当前代码为8.0版,接上一步分布式锁的主要考点lock加锁关键逻辑unlock解锁关键逻辑 二、redis分布式锁-Redlock红锁主页说明:目前所写的分布式锁还有什么…

代码随想录算法训练营第十一天|20 有效的括号 1047 删除字符串中所有相邻重复项 150 逆波兰表达式求值

文章目录 20 有效的括号思路代码总结 1047 删除字符串中所有相邻重复项思路代码总结 150 逆波兰表达式求值思路代码总结 20 有效的括号 思路 思路很经典,用栈寻找匹配括号 但是自己在实现的过程中,有一种情况没想到: 字符串第一个就是右括号…

如何写出高质量代码

一、 前言 编写高质量代码是每一位程序员的追求。高质量的代码可以提高代码可读性、可维护性、可扩展性以及软件运行的性能和稳定性。在这篇文章中,我将分享一些编写高质量代码的特征、编程实践技巧和软件工程方法论。 二、高质量代码的特征 可读性:好的…

Retrofit examples

https://square.github.io/retrofit/ Retrofit是一个基于Java的RESTful API库,它可以让开发者更加方便地处理HTTP请求和响应。 使用例子 以下是一个简单的 Retrofit 框架使用示例: 首先,在项目的 build.gradle 文件中添加 Retrofit 依赖&am…

Android 源码浅析:Leakcanary 内存泄漏检测的好帮手

我们一起来分析一下大名鼎鼎的 Leakcanary, 想必作为 Android 开发都多多少少接触过,新版本的 Leakcanary 也用 Kotlin 重写了一遍,最近详细查看了下源码,分享一下。 tips:本来是只想分析下内存泄漏检测部分&#xff…

Java并发编程基础知识概述

前言 在现代计算机系统和服务器中,多线程并行执行已经成为常态,而且并发编程能够充分利用系统资源,提高程序处理效率和质量。因此,Java并发编程是Java程序员必须掌握的重要技能之一。 线程和进程 在操作系统中,进程是…

python异常及其捕获

文章目录 异常的捕获异常是可传递的 异常的捕获 1.为什么要捕获异常? 在可能发生异常的地方,进行捕获。当异常出现的时候,提供解决方式,而不是任由其导致程序无法运行。 2.捕获异常的语法? try: 可能要发生异常的语句 except 异常名 as 别…

linux系统应用中select函数与poll函数详解

目录 第一:poll()函数详解 第二:select()函数详解 第一:poll()函数详解 1 poll函数概述 select() 和 poll() 系统调用的本质一样,poll() 的机制与 select() 类似,与 select() 在本质上没有多大差别,管理多…

spi 驱动注册分析

/* * spi 驱动注册分析 */ 1. kernel/drivers/spi/spi.c 初始化 spi_init buf kmalloc(SPI_BUFSIZ, GFP_KERNEL); // 申请2的5或6次方的内存 bus_register("spi") -> spi_dev_groups, spi_match_device, spi_uevent // 注册 spi bus …

linux--进程程序替换

目录 一、什么是进程程序替换 二、原理: 三、为什么要进行程序替换 四、六种替换函数 命名理解 (1)函数execl (2)函数execv (3)execlp (4)execvp (5)execle (6)execve 一、什么是进程程序替换 所谓进程程序替换,顾名思义,就是使用一个…

@TransactionalEventListener的使用和实现原理

一、问题描述 平时我们在完成某些数据的入库后,发布了一个事件,此时使用的是EventListener,然后在这个事件中,又去对刚才入库的数据进行查询,从而完成后续的操作。例如(数据入库>对入库数据进行查询审核…
最新文章