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 {@Autowiredprivate 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.mzph.cn/bicheng/8670.shtml

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

相关文章

uniapp + vue3 设置 axios proxy 代理,并重写路径

uniapp vue2 设置代理如下: 已生成的项目架构里面找到manifest.json文件,通过源码视图的方式打开文件,在文件中添加一下代码即可完成代理: "h5": {"devServer": {"disableHostCheck": true, //禁…

模板显式特化与隐式特化

当使用一个模板时&#xff0c;称为实例化模板。模板实例是编译器通过将模板参数应用于模板定义而创建的具体函数或类。模板实例又称为特化。因此&#xff0c;rational<int>是模板rational<>的一个特化。因此&#xff0c;特化是针对特定一组模板参数实现模板的过程。…

linux部署java1.8(jdk1.8)

两种方式&#xff1a; 方式一 1.输入查找命令&#xff1a; yum -y list java*2.输入安装命令&#xff1a; yum install -y java-1.8.0-openjdk.x86_643.测试是否已经安装&#xff1a; java -version方式二&#xff1a; 点击链接进入官网&#xff1a;https://www.oracle.com/…

Python 全栈体系【四阶】(四十一)

第五章 深度学习 九、图像分割 1. 基本介绍 1.1 什么是图像分割 图像分割&#xff08;Segmentation&#xff09;是图像处理和机器视觉一个重要分支&#xff0c;其目标是精确理解图像场景与内容。图像分割是在像素级别上的分类&#xff0c;属于同一类的像素都要被归为一类&a…

ReactFlow的ReactFlow实例事件传参undefined处理状态切换

1.问题 ReactFlow的ReactFlow实例有些事件我们在不同的状态下并不需要&#xff0c;而且有时候传参会出现其它渲染效果&#xff0c;比如只读状态下我们不想要拖拉拽onEdgesChange连线重连或删除的功能。 2.思路 事件名称类型默认值onEdgesChange(changes: EdgeChange[]) >…

pandas快速使用

DataFrame介绍 Dateframe结构和列表类似&#xff0c;区别是对于DataFrame的每一列和每一行均有一个标签。例如以下数据&#xff0c; 上述数据中&#xff0c;日期作为每行的标签。a、b、c、d、e分别是每列的标签 生成连续日期数据 使用方法date_range()&#xff0c;该方法有两…

MySQL部署系列-centos离线安装MySQL

MySQL部署系列-centos离线安装MySQL 文章目录 MySQL部署系列-centos离线安装MySQL1. 查看是否已经安装 Mysql3. 下载官方 Mysql 包3. 下载之后上传到服务器4. 创建用户组5. 创建数据目录并赋予权限6. 修改配置文件 vim /etc/my.cnf7. 初始化数据库(数据库安装)8. 加入到系统服务…

【3dmax笔记】035: 车削修改器

一、车削修改器介绍 车削&#xff1a;图形通过绕轴旋转来创建三维效果。 开放的样条线&#xff0c;车削之后是面片。闭合的样条线&#xff0c;车削之后&#xff0c;是实体。 一、车削修改器实例 绘制高脚杯&#xff0c;首先在前视图绘制如下二维图形。 添加一个车削的修改器…

(六)JSP教程——out对象

out对象是在JSP中经常使用到的对象&#xff0c;它本质上是一个输出流&#xff0c;前面已经多次使用&#xff0c;我们经常使用它的print()和println()方法&#xff0c;这些方法主要用于实现客户端数据的输出。通过out对象也可以直接向客户端发送一个由程序动态生成的HTML文件。 …

PackageKit使用(二)

本篇主要讲述&#xff0c;如何调用PackageKit c库的接口&#xff0c;只举例个别接口&#xff0c;基本上通用。 //检测更新 auto refresher PackageKit::Daemon::refreshCache(false);connect(refresher, &PackageKit::Transaction::errorCode, this, &MainWindow::er…

关于YOLO8学习(三)训练自定义的数据集

前文 关于YOLO8学习(一)环境搭建,官方检测模型部署到手机 关于YOLO8学习(二)数据集收集,处理 简介 本文将会讲解: (1)如何通过PyCharm,进行训练数据,实现人脸检测 开发环境 win10、python 3.11、cmake、pytorch2.0.1+cu117、pycharm、ultralytics==8.0.134 要特…

计算机网络 3.2网络体系结构

第二节 网络体系结构 一、网络协议 1.定义&#xff1a; ①通信双方共同遵守的规则。 ②为网络数据交换制定的规则、约定与标准。 ③网络实体之间通信时有关信息传输顺序、信息格式、信息内容的约定或规则。 2.协议三要素&#xff1a; 语法&#xff1a;确定协议元素的格式…

电子邮件协议

目录 概述 电子邮件系统 客户端 服务器 MIME规范 MIME类型 MIME编码 SMTP协议 SMTP命令和响应 SMTP认证 POP协议 POP连接过程 POP模式 IMAP协议 IMAP连接过程 IMAP模式 总结 概述 电子邮件是互联网时代最常用的通信方式之一&#xff0c;它允许人们在世界各地快…

Double 4 VR智能互动情景教学系统在商务英语课堂中的应用

随着科技的不断发展&#xff0c;虚拟现实技术&#xff08;VR&#xff09;已经逐渐渗透到教育领域&#xff0c;为课堂教学带来了新的可能性。商务英语课堂也不例外&#xff0c;VR智能互动情景教学系统在商务英语课堂中的应用&#xff0c;能够为学生提供更加真实、生动的商务场景…

大模型和传统ai的区别

在人工智能&#xff08;AI&#xff09;领域&#xff0c;大模型一直是一个热议的话题。从之前的谷歌 DeepMind、百度 Big. AI等&#xff0c;再到今天的百度GPT-3,人工智能技术经历了从“有”到“大”的转变。那么&#xff0c;大模型与传统 ai的区别在哪里&#xff1f;这对未来人…

牛客NC97 字符串出现次数的TopK问题【中等 哈希+优先级队列 Java/Go】

题目 题目链接&#xff1a; https://www.nowcoder.com/practice/fd711bdfa0e840b381d7e1b82183b3ee 核心 哈希&#xff0c;优先级队列Java代码 import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定&#xff0c;请勿修改&#xff0c;直接返…

deepstream std mean 对应的计算方法

pytorch中经典值mean[0.485, 0.456, 0.406]&#xff0c;std [0.229, 0.224, 0.225] 在deepstream中的计算方法 deepstream 对应计算公式&#xff1a;y net scale factor*(x-mean) &#xff0c;deepstream中mean也叫作offset deepstream中mean(offset)计算方法为&#xff1a…

[力扣]——387.字符串中的第一个唯一字符

. - 力扣&#xff08;LeetCode&#xff09; class Solution {public int firstUniqChar(String s) {int[] count new int[256];// 统计每个字符出现的次数for(int i 0; i < s.length(); i){count[s.charAt(i)];}// 找第一个只出现一次的字符for(int i 0; i < s.lengt…

轻松实现MySQL集群配置:一主一从与一主多从教程

在数据驱动的时代&#xff0c;数据库的高可用性和负载分散成为了维护在线服务稳定运行的关键。MySQL作为世界上最流行的开源关系型数据库管理系统&#xff0c;其集群配置是任何DBA或开发人员必须掌握的技能之一。本文将为您详细介绍如何轻松配置MySQL的一主一从和一主多从集群&…

python基础 面向练习学习python1

python基础 面向练习学习python1 1. 电话查询问题描述1. 问题分析1. 输入输出分析2. 需求分析&#xff1a;将题目的数据存储并查询2. 所需知识&#xff1a; python 数据存储的类型3. 确定数据存储类型4. 如何书写代码拓展 从键盘中添加或删除联系人5. 回到数据查询 代码拓展 功…