【Spring实战】28 @Autowired 和 @Resource注解的区别与使用

文章目录

    • 1. 区别
      • 1)匹配方式
      • 2)属性名称
      • 3)处理方式
      • 4)支持类型
    • 2. 如何选择
    • 3. 代码示例

Spring 框架是一个强大的 Java 企业应用开发框架,提供了多种依赖注入的方式。其中,@Autowired@Resource 是两个常用的注解,用于实现依赖注入。本文将介绍这两个注解的区别以及在实际应用中如何进行选择。

1. 区别

1)匹配方式

  • @Autowired 是由 Spring 框架提供的注解,用于实现自动装配。它是根据类型进行匹配的,可以用在构造方法、Setter 方法、字段上,甚至可以用在方法参数上。

    @Autowired
    private DemoService DemoService;
    
  • @Resource 是 Java EE 提供的注解,Spring 框架也对其提供支持。它是根据名称进行匹配的,可以用在字段、Setter 方法上,也可以用在方法参数上。

    @Resource(name = "demoService")
    private DemoService DemoService;
    

2)属性名称

  • @Autowired 没提供明确的属性名称指定,它是根据类型进行匹配的,没有类似于 name 属性的指定方式

3)处理方式

  • @Autowired 按照类型匹配进行注入,如果有多个类型匹配,Spring 会选择最匹配的 bean 进行注入。如果没有匹配的bean,会抛出异常

  • @Resource 按照名称匹配进行注入,首先按照指定的名称查找 bean,如果没有找到,则按照类型查找

4)支持类型

  • @Autowired 是 Spring 提供的注解,更加特定于 Spring 框架

  • @Resource 是 Java EE 提供的注解,因此在不使用 Spring 框架时也可以使用

    但是,在 Spring 中更推荐使用 @Autowired

2. 如何选择

在选择使用 @Autowired 还是 @Resource 时,可以根据具体情况考虑以下几点:

  • 项目框架选择:

    如果是纯 Spring 项目,建议使用 @Autowired,因为它更加灵活,是 Spring 框架本身提供的特性。如果需要与非 Spring 框架的组件进行整合,或者在非 Spring 项目中使用,可以考虑使用 @Resource

  • 依赖注入方式:

    如果注重类型匹配,而不关心名称,使用 @Autowired。如果需要根据名称进行匹配,使用 @Resource

  • 项目约定:

    在团队中建议使用一致的注解,以便统一代码风格。可以根据项目的实际情况,选择一种注解作为主要的依赖注入方式

3. 代码示例

使用@Autowired注解的示例:

DemoService.java

package com.cheney.demo.service;import org.springframework.stereotype.Service;@Service
public class DemoService {public void syaHello(){System.out.println("Hello");}
}

DemoController.java

package com.cheney.demo.controller;import com.cheney.demo.service.DemoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RestController;@RestController
public class DemoController {@Autowiredprivate DemoService demoService;public void hello() {demoService.syaHello();}
}

使用@Resource注解的示例:

DemoService.java

package com.cheney.demo.service;import org.springframework.stereotype.Service;@Service
public class DemoService {public void syaHello(){System.out.println("Hello");}
}

DemoController.java

package com.cheney.demo.controller;import com.cheney.demo.service.DemoService;
import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.RestController;@RestController
public class DemoController {@Resource(name = "demoService")private DemoService demoService;public void hello() {demoService.syaHello();}
}

在以上示例中,DemoService 是一个服务类,DemoController 是一个控制器类。通过 @Autowired@Resource 注解,实现了 DemoService 的依赖注入。选择使用哪种注解取决于项目的具体需求和约定。

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

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

相关文章

关联规则分析(Apriori算法2

目录 1.核心术语:2.强关联规则:小结: 1.核心术语: 支持度(Support):指项集出现的频繁程度(相当于项集出现的概率) 最小支持度有绝对值和占比两种表示方式 置信度&#…

Xtuner大模型微调

Xtuner大模型微调 一、课程笔记 文档链接:https://github.com/InternLM/tutorial/blob/main/xtuner/README.md 视频链接: https://www.bilibili.com/video/BV1yK4y1B75J/ 大模型微调 大模型的训练利用了各类数据,可以说是一个通才&#xff…

数据仓库(2)-认识数仓

1、数据仓库是什么 数据仓库 ,由数据仓库之父比尔恩门(Bill Inmon)于1990年提出,主要功能仍是将组织透过资讯系统之联机事务处理(OLTP)经年累月所累积的大量资料,透过数据仓库理论所特有的资料储存架构,做…

高级路由技术案例

文章目录 案例项目一:1、静态ECMP和浮动静态路由配置实验2、浮动静态路由配置 案例项目二:使用filter-policy过滤路由案例项目三:IS-IS基本配置案例项目四:OSPF基本配置案例任务一:OSPF单区域配置案例任务二&#xff1…

开源 UI 组件库和开发工具库概览 | 开源专题 No.59

ant-design/ant-design Stars: 87.9k License: MIT Ant Design 是一个企业级 UI 设计语言和 React UI 库。 为 Web 应用程序设计的企业级 UI。提供一套高质量的开箱即用的 React 组件。使用可预测静态类型编写 TypeScript 代码。包含完整的设计资源和开发工具包。支持数十种语…

zsh插件之gitignore安装使用教程

安装 zsh 插件管理工具 首先,确保你已经安装了 zsh,然后安装 Oh My Zsh,这是一个流行的 zsh 配置框架。在终端运行以下命令安装 Oh My Zsh: bashCopy code sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/ma…

小程序基础学习(组件传参)

原理&#xff1a;通知在组件标签中传递参数已达到传参的目的 在组件的js的 properties中接受传递来的参数 然后在页面是展示这些数据 源码&#xff1a; <!--components/my-info/my-info.wxml--> <view class"title"> <text class"texts"&g…

Java--RSA非对称加密的实现(使用java.security.KeyPair)

文章目录 前言实现步骤测试结果 前言 非对称加密是指使用不同的两个密钥进行加密和解密的一种加密算法&#xff0c;调用方用使用服务方提供的公钥进行加密&#xff0c;服务方使用自己的私钥进行解密。RSA算法是目前使用最广泛的公钥密码算法。Java提供了KeyPairGenerator类要生…

BikeDNA(七)外在分析:OSM 与参考数据的比较1

BikeDNA&#xff08;七&#xff09;外在分析&#xff1a;OSM 与参考数据的比较1 该笔记本将提供的参考自行车基础设施数据集与同一区域的 OSM 数据进行所谓的外部质量评估进行比较。 为了运行这部分分析&#xff0c;必须有一个参考数据集可用于比较。 该分析基于将参考数据集…

01.neuvector防护平台功能实现设计

本篇文章主要讲neuvector大概的设计与实现&#xff0c;功能实现细节可查看后续文章&#xff0c;原文链接,欢迎大家关注我的github账号 一、整体架构 相关主要业务容器运行结构如下&#xff1a; 主要容器为以下几个&#xff1a; Controller容器负责规则的收集与下发&#xff0…

c 生成任意尺寸YUV420P格式水平垂直彩条

因为先控制生成的是像素三基色&#xff0c;所以可以用此方法生成任何图案。如直线&#xff0c;圆&#xff0c;甚至汉字 可以把长宽围成的图案看成是一个大的二维数组&#xff0c;再从其中扣出一部分&#xff0c;再填充一部分就成了。可惜现在jpeg编码程序有错误&#xff0c;显…

Open3D AABB包围盒计算与使用(19)

Open3D AABB包围盒计算与使用(19) 一、算法速览二、算法实现1.代码2.结果少年听雨歌楼上。红烛昏罗帐。壮年听雨客舟中。江阔云低、断雁叫西风。 而今听雨僧庐下。鬓已星星也。悲欢离合总无情。一任阶前、点滴到天明。 一、算法速览 AABB包围盒就是将点云用一个各条边沿着坐…

OceanBase架构概览

了解一个系统或软件&#xff0c;比较好的一种方式是了解其架构&#xff0c;下图是官网上的架构图&#xff0c;基于V 4.2.1版本 OceanBase 使用通用服务器硬件&#xff0c;依赖本地存储&#xff0c;分布式部署在多个服务器上&#xff0c;每个服务器都是对等的&#xff0c;数据库…

翻译: Streamlit从入门到精通 基础控件 一

这个关于Streamlit的教程旨在帮助数据科学家或机器学习工程师&#xff0c;他们不是网络开发者&#xff0c;也不想花费数周时间学习使用这些框架来构建网络应用程序。 1. 什么是Streamlit&#xff1f; Streamlit是一个免费且开源的框架&#xff0c;用于快速构建和共享美观的机器…

nodejs中的共享资源和锁

在Node.js中&#xff0c;如果你使用锁来同步代码&#xff0c;通常是为了防止多个线程或进程同时访问共享资源&#xff0c;这可能导致数据不一致或其他问题。然而&#xff0c;Node.js本身并不是一个多线程环境&#xff0c;而是单线程的。因此&#xff0c;你通常不会在Node.js中使…

[小程序]定位功能实现

第一步:首先要认识三个小程序的 api wx.chooseLocation 和 wx.getLocation 和 wx.openLocation (1).wx.chooseLocation 用于在小程序中选择地理位置。当用户点击选择位置按钮时&#xff0c;小程序会调起地图选择界面&#xff0c;用户可以在地图上选择一个位置&#xff0c;并可以…

ubuntu连接xshell怎么连接

在网上找了好多办法都不行 例如 太久没打开Ubuntu可能输入命令查不到IP地址&#xff0c;解决办法也比较简单&#xff0c;首先第一步 确定自己能不能进入管理员root权限&#xff08;输入命令su&#xff09;&#xff0c;如果没有的话得重新配置&#xff0c;如下图 这是因为当前Ub…

gin切片表单验证

在Gin中对切片进行表单验证的步骤与对其他类型的字段进行验证类似。以下是一些基本步骤&#xff0c;我们可以根据具体的需求进行调整&#xff1a; 定义结构体&#xff1a; 创建一个结构体&#xff0c;用于存储表单数据。确保结构体中的字段类型与你预期的表单数据类型一致。 使…

【DP】583.两个字符串的删除操作

题目 法1&#xff1a;DP 本质是不带替换操作的最小编辑距离问题&#xff01;&#xff01;&#xff01; class Solution {public int minDistance(String word1, String word2) {int m word1.length() 1, n word2.length() 1;int[][] dp new int[m][n];for (int i 1; i…

LINUX基础第十一章:文件系统与日志服务管理

目录 一.LINUX文件系统 1.inode表和block &#xff08;1&#xff09;inode &#xff08;2&#xff09;block 2.查看inode号命令 3.Linux系统文件三种主要时间属性 4.磁盘空间还剩余很多但无法继续创建文件 5.inode大小 二.日志 1.日志保存位置 2.日志文件的分类 &am…