Java | Spring框架 | @Autowired与@Resource

在Spring框架中,依赖注入是一种核心概念,它允许开发者将对象的创建和对象之间的依赖关系的管理交给框架来处理。这样做的目的是为了提高代码的模块化和可测试性。

Spring提供了多种方式来实现依赖注入,其中最常用的方式是通过注解。在本文中,我们将详细探讨@Autowired@Resource这两个注解。

一、@Autowired注解

@Autowired是Spring框架提供的一个注解,用于实现自动依赖注入。它可以应用于变量、构造函数、设置方法上。当Spring容器启动时,它会自动查找并注入所需的依赖。

代码示例

我们创建一个简单的Spring Boot应用程序,其中包含一个服务类MyService和控制器MyController

// MyService.java
package com.example.demo.service;
import org.springframework.stereotype.Service;
@Service
public class MyService {
    public void performTask() {
        System.out.println("Task performed by MyService");
    }
}

// MyController.java
package com.example.demo.controller;
import com.example.demo.service.MyService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class MyController {
    @Autowired
    private MyService myService;
    @GetMapping("/perform-task")
    public String performTask() {
        myService.performTask();
        return "Task performed";
    }
}

作用说明
  • @Autowired注解自动注入MyService的实例到MyController中。
  • MyControllerperformTask方法被调用时,它将通过myService实例调用performTask方法。

二、@Resource注解

@Resource是Java标准库中的注解,属于JSR-250规范。它也可以用于实现依赖注入,但与@Autowired不同的是,@Resource可以通过名称来指定要注入的依赖。

代码示例

继续使用上面的例子,但这次我们使用@Resource注解,并指定注入的名称。

// MyController.java
package com.example.demo.controller;
import com.example.demo.service.MyService;
import javax.annotation.Resource;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class MyController {
    @Resource(name = "myService")
    private MyService myService;
    @GetMapping("/perform-task")
    public String performTask() {
        myService.performTask();
        return "Task performed";
    }
}
作用说明
  • @Resource注解通过名称myService注入MyService的实例。
  • 这里的名称必须与Spring容器中定义的bean名称相匹配。

三、@Autowired@Resource的区别

使用上的差异
  • @Autowired是Spring框架特有的注解,而@Resource是Java标准库中的注解。
  • @Autowired默认按类型进行注入,而@Resource默认按名称进行注入。
  • @Autowired可以通过@Qualifier注解指定注入的bean名称,而@Resource可以通过name属性指定注入的bean名称。
  • @Autowired可以应用于构造函数、变量、设置方法上,而@Resource只能应用于变量和设置方法上。
适用场景的比较
  • 当我们希望按类型进行注入时,可以使用@Autowired
  • 当我们希望按名称进行注入时,可以使用@Resource
  • 当我们希望有更多的控制权,例如在多个同类型的bean中指定一个特定的bean时,可以使用@Autowired结合@Qualifier或者@Resourcename属性。

两个注解的选择建议
  • 如果你的应用完全基于Spring框架,并且不需要与其他框架集成,那么建议使用@Autowired
  • 如果你需要在多个框架之间进行集成,或者需要按名称进行注入,那么建议使用@Resource

以上就是本次的分享,下面是影子为你带来的两份大礼。

一、欢迎加我的微信围观影子的AI编程玩法,你可以直接与影子交流,无论是Java领域还是AI编程玩法,影子都已深耕多年,期待与你的相遇~

 二、加好友时备注 AI+编程,送你一份影子沉淀多个月的AI学习资料,帮助你快速入门。详细可参考下面的文章:

AI编程学习icon-default.png?t=N7T8https://blog.csdn.net/yingzix688/article/details/137894050


最后影子再做个自我介绍:

AI+编程深耕者,致力于通过AI减少工作时间,提高开发效率,帮助小白早日踏进AIG的时代。

在影子这里,如果你是小白,你可以学习到AI+编程的入门玩法,帮助你解决一些编程开发的重复性问题;如果你有基础,影子可以给你提供进阶的知识,让你的AI+编程能力更进一步。

同时影子也会分享自己使用AI作为副业赚钱的经历。

影子的梦想是帮助更多编程小白入门AI+编程,而在即将到来的AIG时代,只会淘汰不会使用AI的编程者,希望能有更多的人可以在影子这里学习到AI编程的能力,在未来的AI时代中,不被淘汰。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

mysql数据库---操作数据库跟表的命令总结

前言 欢迎来到我的博客 个人主页:北岭敲键盘的荒漠猫-CSDN博客 本文着重整理mysql管理库跟表的指令。 不涉及增删查改等指令 其实本篇主要是我做好笔记格式 用的时候直接复制粘贴的 所以排版大多是为了快速找功能来排的 方便大家快速找目标语法 数据库的简介 一个数据库系…

[Redis] 使用布隆过滤器和分布式锁实现用户注册

布隆过滤器(Bloom Filter)是一种数据结构,用于快速判断一个元素是否可能存在于一个集合中。它通过使用多个哈希函数和一个位数组来表示一个集合,当一个元素被加入到集合时,通过哈希函数计算出多个哈希值,并…

Hypack 2024 简体中文资源完整翻译汉化已经全部完成

Hypack 2024 简体中文资源完整翻译汉化已经全部完成 Hypack 2024,资源汉化共翻译11065条。毕竟涉及测绘、水文、疏浚等专业术语太多,翻译有很多理解不正确的地方,望各位专业人员指正。 压缩包内包含Hypack 2024、Hypack 2022、Hypack 2021、…

什么样的行业适合做私域?

私域营销适用于各种行业,但以下几个行业尤其适合进行私域营销: 1、零售行业:私域营销可以帮助零售企业建立与顾客的直接联系,提高顾客忠诚度和复购率。通过私域营销,零售企业可以进行个性化推荐、定制化服务&#xff…

JavaWeb--11MySQL(3)-- 多表设计

MySQL(3)-- 多表设计 1 一对多(多对一)2 一对一3 多对多 各个表结构之间也存在着各种联系,基本上分为三种: 一对多(多对一)多对多一对一 1 一对多(多对一) 一对多关系实现&#x…

【Java】IO流:字节流 字符流 缓冲流

接续上文,在这篇文章将继续介绍在Java中关于文件操作的一些内容【Java】文件操作 文章目录 一、“流”的概念1.“流”的分类1.1输入流和输出流1.2字节流和字符流 字节和字符的区别?为什么要有字符流?1.3节点流和处理流 字符流自带缓冲区&…

【Linux——Centos7安装RabbitMQ】 RabbitMQ无法连接

到这一步是基本已经装好了,现在是在开放端口,我这个报错是因为我的防火墙是处于关闭状态,所以在开放端口时会报防火墙为运行,把防火墙打开,在开放端口,就可以访问到了 重启防火墙: systemctl …

【无标题】基于GIS、Python机器学习技术的地质灾害风险评价、易发性分析与信息化建库及灾后重建中的实践技术

理解地质灾害形成机理与成灾模式;从空间数据处理、信息化指标空间数据库构建、致灾因子提取,空间分析、危险性评价与制图分析等方面掌握GIS在灾害危险性评价中的方法;运用地质灾害危险性评价原理和技术方法 原文链接:基于GIS、Py…

DeepSeek API文档:创建对话补全的指南

DeepSeek平台不仅提供了一个用户友好的聊天界面,还为开发者提供了强大的API接口,使他们能够创建和集成智能对话补全功能。以下是关于如何使用DeepSeek API创建对话补全的详细介绍。 DeepSeek API概述 DeepSeek的API允许开发者通过编程方式与DeepSeek的…

应用软件安全保证措施方案书

系统安全保证措施方案—word原件 软件全套资料进主页获取或者本文末个人名片直接获取。

【文章转载】ChatGPT 提示词十级技巧: 从新手到专家

学习了微博网友宝玉xp老师《ChatGPT 提示词十级技巧: 从新手到专家》 个人学习要点: 1、关于提示中避免使用否定句,播主说:“没有人能准确解释为什么,但大语言模型在你告诉它去做某事时,表现似乎比你让它不做某事时更…

识货小程序逆向

声明 本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!wx a15018601872,x30184483x…

Java进阶07集合(续)

Java进阶07 集合(续) 一、数据结构(树) 1、关于树 1.1 相关概念 节点:树中每个单独的分支 节点的度:每个节点的子节点数量 树高:树的总层数 根节点:最顶层节点 左子节点&…

6层板学习笔记2

说明:笔记基于6层全志H3消费电子0.65MM间距BGA 67、多层板的电源建议直接大面积铺铜,不建议走线,铺铜充分满足其载流能力 68、凡亿推荐表层1OZ的铜厚线宽20MIL能承载1A的电流,内层0.5OZ的铜厚线宽为40MIL能承载1A的电流,过孔直径20MIL(0.5MM)能承载1A左右的电流,实际设…

typescript的入门到吐槽:看了typescript,发现前端真的卷,

typescript TypeScript 是一种由微软开发的自由和开源的编程语言。它是 JavaScript 的一个超集,而且本质上向这个语言添加了可选的静态类型和基于类的面向对象编程。 TypeScript 与 JavaScript 的区别 其实就是对JavaScript的封装,把一个弱类型语言封…

remmina无法连接远程桌面,Remmina无法连接远程桌面的原因与解决办法

在解决Remmina无法连接远程桌面的问题时,我们需要考虑多种可能的原因,并采取相应的解决办法。以下是一些常见的原因及其对应的解决方案: 1、网络问题 原因:不稳定的网络连接或中断可能导致无法建立远程桌面连接。 解决办法&#x…

MySQL数据库---增删查改汇总

前言 欢迎来到我的博客 个人主页:北岭敲键盘的荒漠猫-CSDN博客 本文着重整理MySQL数据库增删查改功能 主要是整理语法 争取做到要用什么语法 可以快速找到复制粘贴 增添语法 INSERT into tab(列名,列名,列名) values(内容,内容,内容); 插入一行数据 INSERT into tab(列名,…

Kubernetes最小单元Pod介绍及配置

1.1 Pod介绍 Pod是Kubernetes中的一个基本构建块,它是一个逻辑主机,用于托管一个或多个容器。 Pod中的容器共享网络和存储资源,并且通常作为一个单元一起调度和管理。 Pod为容器提供了一个共享的环境,使得容器之间可以方便地通信…

Android进阶之路 - 静态会员进度条

年后这个新版本加入了VIP模块,有幸正好由我来负责,可以再积累一下这方面的知识。 那段时间看了一本书,书中说到初级码农的特性之一就是完全集中于某些功能,忽略了了很多成长机会,所以重复性劳作带来的成长值有限&#…

基于51单片机的智能台灯proteus仿真设计( proteus仿真+程序+原理图+报告+讲解视频)

基于51单片机的红外光敏检测智能台灯控制系统仿真( proteus仿真程序原理图报告讲解视频) 1.主要功能: 基于51单片机的红外检测光照检测智能台灯仿真设计 1、检测光照强度并显示在数码管上。 2、具备红外检测人体功能。 3、灯光控制模式分为自动模式…
最新文章