@Autowired和@Resource区别

目录

前言

一、@Autowired

二、@Resource

三、区别


前言

    在Java的Spring框架中,依赖注入(Dependency Injection, DI)是一种核心的技术,它允许我们将所依赖的对象或属性以外部化的方式提供给一个对象,而不是在对象内部创建它们。这种技术降低了代码之间的耦合度,提高了代码的可测试性和可维护性。在Spring中,@Autowired@Resource是两个常用的注解,它们都用于实现依赖注入,但它们在功能和使用上有一些微妙的差异。

  @Autowired注解是Spring框架提供的,它按照类型(byType)自动装配bean,开发者无需显式地指定bean的名称或搜索bean。Spring容器在启动时会自动扫描带有@Autowired注解的字段、构造函数或方法,并尝试从容器中查找匹配的bean来注入。这种自动装配的方式大大简化了配置和编码的工作。

    另一方面,@Resource注解是Java标准的一部分,它提供了按名称(byName)自动装配bean的能力。@Resource注解可以用在字段或方法上,如果没有显式地指定名称,则默认按照字段名或方法名来查找bean。这个注解不是Spring特有的,但它的使用在Spring环境中也是非常普遍的。

    了解@Autowired@Resource之间的区别对于编写清晰、可维护的Spring应用程序是至关重要的。本文将详细探讨这两个注解的功能、使用方式和它们之间的主要区别,帮助读者更好地理解和应用它们。通过正确地使用这些注解,我们可以更轻松地实现依赖注入,从而提高代码的质量和效率。

一、@Autowired

  @Autowired 是 Spring 框架中的一个注解,用于自动装配 bean 依赖。当 Spring 容器启动时,它会自动扫描带有 @Autowired 注解的字段、构造函数或方法,并尝试从容器中查找匹配的 bean 来注入。这使得开发者无需显式地通过 new 关键字或工厂方法来实例化依赖对象。

例如:

@Service  
public class MyService {  private final MyRepository repository;  @Autowired  public MyService(MyRepository repository) {  this.repository = repository;  }  
}

    在这个例子中,MyRepository 类型的 repository 依赖会被 Spring 容器自动注入到 MyService 的构造函数中

二、@Resource

  @Resource 是 Java 标准的一部分,定义在 javax.annotation 包中。它也是一个用于依赖注入的注解,但不同于 @Autowired,它不是一个特定于 Spring 的注解。@Resource 注解可以根据名称来查找 bean,如果没有指定名称,则默认按照字段名或方法名来查找。

例如:

public class MyService {  @Resource(name = "myRepository")  private MyRepository repository;  
}

    在这个例子中,Spring 容器(或其他支持 @Resource 的容器)会查找名为 "myRepository" 的 bean 来注入到 repository 字段中。如果没有指定 name 属性,那么容器会尝试查找名为 "repository" 的 bean。

三、区别

  1. 来源@Autowired 是 Spring 特有的,而 @Resource 是 Java 标准的一部分。
  2. 注入方式@Autowired 默认按类型(byType)注入,而 @Resource 默认按名称(byName)注入,但两者都可以通过特定的属性来改变这种行为。
  3. 必要性:在 Spring 中,如果只有一个候选 bean 符合注入条件,那么 @Autowired 可以不需要显式指定 bean 的名称。但对于 @Resource,如果没有指定名称,那么会按照字段名或方法名来查找 bean。
  4. 异常处理:当找不到匹配的 bean 时,@Autowired 会抛出异常,除非设置了 required 属性为 false。而 @Resource 在找不到匹配的 bean 时,默认不会抛出异常,而是会让字段保持为 null

请注意,由于 @Autowrite 不是一个标准的或广泛使用的注解,因此上述比较是基于 @Autowired 和 @Resource 的。如果您实际上是指另一个特定的注解,请提供更多信息以便获得准确的解释。 

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

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

相关文章

c#之构值类型和引用类型

值类型:(整数/bool/struct/char/小数) 引用类型:(string/ 数组 / 自定义的类 / 内置的类) 值类型只需要一段单独的内存,用于存储实际的数据 引用类型需要两段内存(第一段存储实际的数据,他总是位于 堆中第二段是一个引用,指向数据在堆中的存放位置) 当使用引用类型赋值的时…

C++:类 的简单介绍(一)

目录 类的引用: 类的定义: 类的两种定义方式: 成员变量命名规则的建议: 类的访问限定符及封装: 访问限定符 【访问限定符说明】 封装 class与struct的区别: 类的作用域: 类的实例化…

前端大厂面试题探索编辑部——第三期

目录 题目 单选题1 题解 关于浏览器缓存 Last-Modified/If-Modified-Since ETag/If-None-Match 关于浏览器删除缓存数据 单选题2 题解 跨域问题 用document.domain解决的问题 题目 单选题1 1.关于浏览器缓存,以下哪个选项是不正确的(&#…

centos下安装mongo C C++ 驱动

安装mongo-cxx-driver-r3.4.0 cmake的时候报错: 报错: CMake Error at src/mongocxx/CMakeLists.txt:54 (find_package):By not providing "Findlibmongoc-1.0.cmake" in CMAKE_MODULE_PATH thisproject has asked CMake to find a package configura…

ubuntu 安装node和npm

ubuntu 安装node 一、前言 在ubuntu中经常需要用到node ,npm,因为npm基本会和node同时安装,所以只需要安装node即可。 可以使用 nvm(Node Version Manager)来管理你的 Node.js 版本 二、具体步骤 1、nvm的安装 首先&#xf…

嵌入式——直接存储器存取(DMA)补充

目录 一、认识 DMA 二、DMA结构 1. DMA请求 2. 通道DMA 补:通道配置过程。 3. 仲裁器 三、DMA数据配置 1. 从哪里来,到哪里去 (1)从外设到存储器 (2)从存储器到外设 (3)从…

React 组件生命周期-概述、生命周期钩子函数 - 挂载时、生命周期钩子函数 - 更新时、生命周期钩子函数 - 卸载时

React 组件生命周期-概述 学习目标: 能够说出组件的生命周期一共几个阶段 组件的生命周期是指组件从被创建到挂在到页面中运行,在到组件不用时卸载组件 注意:只有类组件才有生命周期,函数组件没有生命周期(类组件需要实例化&…

LeetCode344反转字符串(java实现)

今天我们来分享的题目是leetcode344反转字符串。题目描述如下: 我们观察题目发现,题目要求使用O(1)的空间解决这一问题。那么我们就不能进行使用开辟新的数组进行反转了。 解题思路:那么该题的我得思路是使用双指针的方法进行题解&#xff0…

TypeScript Symbol

1.什么Symbol? Symbol是ES6中新增的一种数据类型, 被划分到了基本数据类型中 基本数据类型: 字符串、数值、布尔、undefined、null、Symbol 引用数据类型: Object 2.Symbol的作用 用来表示一个独一无二的值 3.如何生成一个独一无二的值? let xxx Symbol(); 4.为什么需要Symb…

2024獬豸杯

2024.1.28上午9-12时,返乡大学生边帮姐带娃边做,有几题没交上 解压密码:都考100分 手机备份包 手机基本信息 1、IOS手机备份包是什么时候开始备份的。(标准格式:2024-01-20.12:12:12) 2024-01-15.14.19.44 2、请分…

Docker 安装与基本操作

目录 一、Docker 概述 1、Docker 简述 2、Docker 的优势 3、Docker与虚拟机的区别 4、Docker 的核心概念 1)镜像 2)容器 3)仓库 二、Docker 安装 1、命令: 2、实操: 三、Docker 镜像操作 1、命令&#xff1…

centos7 挂载windows共享文件夹报错提示写保护

centos7挂载windows共享时,提示被共享的位置写保护,只能以只读方式挂载,紧接着就是以只读方式挂载失败 原因是组件少装了 yum install cifs-utils 安装完后,正常挂载使用。 下载离线安装包 下载离线包下载工具 下载离线安装包…

SpringBoot系列之MybatisPlus实现分组查询

SpringBoot系列之MybatisPlus实现分组查询 我之前博主曾记写过一篇介绍SpringBoot2.0项目怎么集成MybatisPlus的教程,不过之前的博客只是介绍了怎么集成,并没有做详细的描述各种业务场景,本篇博客是对之前博客的补充,介绍在mybat…

2024/1/27 备战蓝桥杯 1-1

目录 求和 0求和 - 蓝桥云课 (lanqiao.cn) 成绩分析 0成绩分析 - 蓝桥云课 (lanqiao.cn) 合法日期 0合法日期 - 蓝桥云课 (lanqiao.cn) 时间加法 0时间加法 - 蓝桥云课 (lanqiao.cn) 扫雷 0扫雷 - 蓝桥云课 (lanqiao.cn) 大写 0大写 - 蓝桥云课 (lanqiao.cn) 标题…

JUC并发编程与源码分析学习笔记(三)

目录 五十六、JMM之入门简介 五十七、JMM之学术定义和作用 五十八、JMM之三大特性 五十九、JMM之多线程对变量的读写过程 六十、JMM之happens-before-上集 六十一、JMM之happens-before-下集 五十六、JMM之入门简介 Java内存模型之JMM 1、先从大厂面试题开始 ①、你知道…

【SpringSpringBoot】概述

Spring&SpringBoot专题 【注】: 本专题围绕框架核心概念展开,渐进式深入总结学习、面试、开发经验,集中整理便于回顾 持续补充与施工中~~~~ 1.发展史 2.基本架构 Spring框架的基本架构是一个分层架构,包括多个模块&#x…

2024三掌柜赠书活动第六期:人人都离不开的算法——图解算法应用

目录 前言算法概念图解算法应用算法的价值和挑战关于《人人都离不开的算法——图解算法应用》编辑推荐内容简介作者简介图书目录书中前言/序言书摘插画《人人都离不开的算法——图解算法应用》全书速览结束语 前言 作为开发者想必都知道,算法是现代社会中无处不在…

day33_js

今日内容 0 复习昨日 1 JS概述 2 JS的引入方式 3 JS语法 3.1 变量 3.2 基本数据类型 3.3 引用类型 3.4 数组类型 3.5 日期类型 3.6 运算符(算术运算,逻辑,关系运算,三目运算) 3.7 分支 3.8 循环 3.9 函数(重点) 3 常见弹窗函数 alter,confirm,prompt 0 复习昨日 1 盒子模型 对d…

兄弟MFC-8515DN黑白激光多功能一体机硒鼓及粉盒清零方法

耗材信息: 硒鼓DR-3350:约30000页; 墨粉盒TN-3335:约3000页【A4纸5%覆盖率】; 高容量墨粉盒TN-3385:约8000页【A4纸5%覆盖率】; 超高容量墨粉盒TN-3395:约12000页【A4纸5%覆盖率】&a…

php项目下微信小程序对接实战问题与解决方案

一.实战问题与方案总结 1.SQL查询条件是一组数,传参却是一个字符串导致报错,如下 SQLSTATE[HY093]: Invalid parameter number (SQL: select count(*) as aggregate from car_video where province_id in (1492) and city_id in (1493) and county_id …