Spring AutoWired与Resource区别?

大家好,我是锋哥。今天分享关于【Spring AutoWired与Resource区别?】面试题。希望对大家有帮助;

Spring AutoWired与Resource区别?

1000道 互联网大厂Java工程师 精选面试题-Java资源分享网

在 Spring 中,@Autowired@Resource 都是用于依赖注入(DI,Dependency Injection)的注解,它们的作用是将一个 Bean 自动注入到另一个 Bean 中。虽然它们的功能相似,但也存在一些差异。下面我们将详细对比这两者的不同之处。

1. @Autowired 注解

@Autowired 是 Spring 提供的注解,它可以自动将一个 Bean 注入到其他 Bean 中。它基于类型(默认)或名称来注入依赖,具体行为可以通过不同的配置来定制。

使用方式:
@Component
public class Car {private Engine engine;@Autowiredpublic Car(Engine engine) {  // 构造器注入this.engine = engine;}public Engine getEngine() {return engine;}
}
主要特点:
  • 按类型注入@Autowired 默认是按类型(type)来进行注入的。Spring 会根据类型自动匹配合适的 Bean。如果有多个符合条件的 Bean,会根据配置的规则选择一个。

  • 构造器注入、字段注入和方法注入@Autowired 可以用在构造器、字段和 setter 方法上。

  • required 属性:可以通过 @Autowired(required=false) 来配置非必需的依赖,如果没有找到匹配的 Bean,则不会抛出异常。

    示例:

    @Autowired(required = false)  // 不会抛出异常,如果没有找到对应的 Bean
    private Engine engine;
    
  • @Primary 配合使用:如果有多个候选 Bean 可以注入,@Primary 注解可以指定默认的注入 Bean。

按名称选择注入:

如果要按名称注入(比如某个 Bean 的名称为 engine),可以配合 @Qualifier 注解使用。

@Autowired
@Qualifier("specificEngine")
private Engine engine;

2. @Resource 注解

@Resource 是 Javax 提供的注解,并且它是 JSR-250 的一部分。它的功能与 @Autowired 类似,但其注入方式优先考虑 按名称,其次按 类型 进行注入。

使用方式:
@Component
public class Car {@Resourceprivate Engine engine;
}
主要特点:
  • 按名称注入@Resource 优先按照 Bean 的名称进行注入。如果没有找到符合名称的 Bean,Spring 会继续根据类型进行注入。

  • name 属性:可以显式指定要注入的 Bean 的名称。

    示例:

    @Resource(name = "specificEngine")
    private Engine engine;
    
  • @Autowired 的区别@Resource 注解具有明确的优先级,首先通过 Bean 的名称来匹配,如果没有找到匹配的 Bean,再按类型进行注入。因此,它在注入时会首先依赖名称来进行匹配,而不是像 @Autowired 默认的按类型注入。

    例如:

    @Component
    public class Car {@Resource(name = "specificEngine")private Engine engine;
    }
    

    如果 @Resource 找不到名称为 specificEngine 的 Bean,才会根据类型进行注入。

3. @Autowired 与 @Resource 的主要区别

特性@Autowired@Resource
注入方式默认按类型注入;可以通过 @Qualifier 按名称指定默认按名称注入;如果找不到名称,则按类型注入
优先级按类型优先匹配;可以使用 @Qualifier 精确匹配按名称优先匹配;其次按类型匹配
required 属性可以设置 required = false 控制是否为必填项没有 required 属性
支持的注入位置支持构造器注入、字段注入、setter 方法注入仅支持字段注入和 setter 方法注入
规范支持Spring 提供的注解JSR-250 规范的一部分

4. 实际应用中选择使用 @Autowired 或 @Resource

  • @Autowired 更常用:由于 @Autowired 是 Spring 框架提供的注解,默认按类型进行注入,因此在大多数情况下,它更加灵活且易于使用。使用时,通常搭配 @Qualifier 精确指定注入的 Bean。
  • @Resource 适合 Java EE 规范要求的场景@Resource 是 JSR-250 规范的一部分,适用于那些需要遵循 Java EE 规范的项目,或者当你想明确按名称注入时,使用 @Resource 会更加直观。

5. 代码示例比较

使用 @Autowired 按类型注入:
@Component
public class Car {@Autowiredprivate Engine engine;  // 按类型注入 Engine 类型的 Bean
}
使用 @Resource 按名称注入:
@Component
public class Car {@Resource(name = "specificEngine")private Engine engine;  // 按名称注入名为 specificEngine 的 Bean
}

总结

  • @Autowired:是 Spring 专有的注解,按类型注入 Bean,具有灵活的配置选项,适用于大多数 Spring 应用。
  • @Resource:是 JSR-250 规范的一部分,优先按名称注入,如果没有找到合适的名称 Bean,则按类型注入,适合需要遵循 Java EE 规范的项目。

在实际开发中,@Autowired 是最常见的选择,@Resource 更多用于与 Java EE 标准兼容的项目。

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

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

相关文章

【知识】深度学习中,应该先zero_grad还是先backward?

转载请注明出处:小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你,欢迎[点赞、收藏、关注]哦~ 目录 抛出问题 各大GPT的回答 ChatGPT-4o ChatGPT-o3-mini-high Kimi-长思考 Deepseek-R1 Grok3 Pytorch官方教程中 抛出问题 以下哪种方式是…

Python----数据结构(哈希表:哈希表组成,哈希冲突)

一、哈希表 哈希表(Hash table)是一种常用、重要、高效的数据结构。 哈希表通过哈希函数,可以快速地将键(Key)映射到值(Value)。从而允许在近常数时间内对键关联的值进行插入、删除和查找操作。 哈希表的主要思想是通过哈希函数将键转换为索引,将索引映射到数组中…

使用excel中的VBA合并多个excel文件

需求是这样的: 在Windows下,用excel文件让多个小组填写了统计信息,现在我需要把收集的多个文件汇总到一个文件中,前三行为标题可以忽略,第四行为收集信息的列名,处理每一行数据的时候,发现某一行…

功能全面的手机壁纸应用,种类齐全、众多高清壁纸

软件介绍 应用亮点:今天给大家分享一款超神奇的手机应用 —— 奇幻壁纸。它作为手机动态壁纸软件,功能超全面,操作还便捷,极具创意,能瞬间将你的手机屏幕变成奇幻世界,带来全新视觉感受。 使用便捷性&…

docker安装kafka,并通过springboot快速集成kafka

目录 一、docker安装和配置Kafka 1.拉取 Zookeeper 的 Docker 镜像 2.运行 Zookeeper 容器 3.拉取 Kafka 的 Docker 镜像 4.运行 Kafka 容器 5.下载 Kafdrop 6.运行 Kafdrop 7.如果docker pull wurstmeister/zookeeper或docker pull wurstmeister/kafka下载很慢&#x…

前端导出word文件,并包含导出Echarts图表等

基础导出模板 const html <html><head><style>body {font-family: Times New Roman;}h1 {text-align: center;}table {border-collapse: collapse;width: 100%;color: #1118FF;font-weight: 600;}th,td {border: 1px solid black;padding: 8px;text-align: …

2024系统编程语言风云变幻:Rust持续领跑,Zig与Ada异军突起

2024年系统编程语言调查报告新鲜出炉&#xff01;这份报告对Rust、Zig、Ada、C、C等主流语言进行了全面评估&#xff0c;结果令人瞩目。Rust凭借其强大的类型系统和内存安全机制继续领跑&#xff0c;而Zig和Ada则展现出巨大的潜力&#xff0c;为系统编程领域带来了新的活力。本…

Jenkins 构建 Unity 打包 .apk 同时生成 .aab

Jenkins 构建 Unity 打包 .apk 同时生成 .aab Android App Bundle简称 AAB&#xff0c;想了解更多关于 AAB 的知识&#xff0c;请看官网 https://developer.android.google.cn/guide/app-bundle/faq?hlzh-cn APK 打包部分在复用上一篇 Jenkins 构建 Unity打包APK 一、新建一…

JAVAweb-标签选择器,盒模型,定位,浮动

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>标签</title><style type"text/css&q…

计算机视觉:主流数据集整理

第一章&#xff1a;计算机视觉中图像的基础认知 第二章&#xff1a;计算机视觉&#xff1a;卷积神经网络(CNN)基本概念(一) 第三章&#xff1a;计算机视觉&#xff1a;卷积神经网络(CNN)基本概念(二) 第四章&#xff1a;搭建一个经典的LeNet5神经网络(附代码) 第五章&#xff1…

二级公共基础之数据结构与算法篇(五)树和二叉树

目录 前言 一、树的基本概念 1.父结点和根节点 2.子节点和叶子节点 3.度和深度 4.子树 二、二叉树及其基本性质 1. 二叉树的定义 2. 二叉树的基本性质 性质1 性质2 性质3 性质4 性质5 性质6 三、二叉树的存储结构 四、二叉树的遍历 1.遍历二叉树的概念 1. 前…

自制操作系统学习第七天

今天要做什么&#xff1f; 实现HLT&#xff0c;不让计算机处于HALT&#xff08;HLT&#xff09;.用C语言实现内存写入&#xff08;错误&#xff0c;需要分析&#xff09; 一:使用HLT&#xff0c;让计算机处于睡眠状态 写了下面这个程序&#xff0c;naskfunc.nas 函数名叫io_h…

Python Django系列—入门实例(二)

数据库配置 现在&#xff0c;打开 mysite/settings.py 。这是个包含了 Django 项目设置的 Python 模块。 默认情况下&#xff0c;​ DATABASES 配置使用 SQLite。如果你是数据库新手&#xff0c;或者只是想尝试 Django&#xff0c;这是最简单的选择。SQLite 包含在 Python 中…

DeepSeek接入Siri(已升级支持苹果手表)完整版硅基流动DeepSeek-R1部署

DeepSeek接入Siri&#xff08;已升级支持苹果手表&#xff09;完整版硅基流动DeepSeek-R1部署 **DeepSeek** 是一款专注于深度学习和人工智能的工具或平台&#xff0c;通常与人工智能、机器学习、自动化分析等领域有关。它的主要功能可能包括&#xff1a;深度学习模型搜索&…

抗辐照加固CAN FD芯片的商业航天与车规级应用解析

在工业自动化、智能汽车、航空航天及国防装备等关键领域&#xff0c;数据传输的安全性、可靠性与极端环境适应能力是技术升级的核心挑战。国科安芯推出全新一代CANFD&#xff08;Controller Area Network Flexible Data Rate&#xff09;芯片&#xff0c;以高安全、高可靠、断电…

Java数据结构第十二期:走进二叉树的奇妙世界(一)

专栏&#xff1a;数据结构(Java版) 个人主页&#xff1a;手握风云 目录 一、树型结构 1.1. 树的定义 1.2. 树的基本概念 1.3. 树的表示形式 二、二叉树 2.1. 概念 2.2. 两种特殊的二叉树 2.3. 二叉树的性质 2.4. 二叉树的存储 三、二叉树的基本操作 一、树型结构 1.…

nginx 反向代理 配置请求路由

nginx | 反向代理 | 配置请求路由 nginx简介 Nginx&#xff08;发音为“Engine-X”&#xff09;是一款高性能、开源的 Web 服务器和反向代理服务器&#xff0c;同时也支持邮件代理和负载均衡等功能。它由俄罗斯程序员伊戈尔西索夫&#xff08;Igor Sysoev&#xff09;于 2004…

ath9k(Atheros芯片)开源驱动之wifi连接

为什么会推荐这个wifi 驱动进行学习&#xff1f; ath9k&#xff08;Atheros芯片&#xff09;&#xff1a;代码结构清晰&#xff0c;适合学习实践 为什么我只在开篇写了一个wifi连接的操作&#xff1f; 先让一个开源驱动在你的硬件上跑起来&#xff0c;再逐步修改&#xff0c…

LLaMA-Factory|微调大语言模型初探索(4),64G显存微调13b模型

上篇文章记录了使用lora微调deepseek-7b&#xff0c;微调成功&#xff0c;但是微调llama3-8b显存爆炸&#xff0c;这次尝试使用qlora微调HQQ方式量化&#xff0c;微调更大参数体量的大语言模型&#xff0c;记录下来微调过程&#xff0c;仅供参考。 对过程不感兴趣的兄弟们可以直…

知识管理平台如何实现高效数据整合?

内容概要 现代知识管理平台通过架构化的四库体系&#xff08;资源库、规则库、模型库、知识库&#xff09;驱动数据智能整合进程。核心机制依托智能数据工具集对异构数据进行自动化清洗与语义标注&#xff0c;其跨源数据汇聚能力支持超过200种结构化与非结构化数据源的接入&am…