Springboot中@Autowired和@Resource注解的区别和联系

ops/2025/2/6 3:26:37/

文章目录

  • Springboot中@Autowired和@Resource注解的区别和联系
    • 一、引言
    • 二、@Autowired注解
      • 1、注解来源
      • 2、工作原理
      • 3、使用示例
    • 三、@Resource注解
      • 1、注解来源
      • 2、工作原理
      • 3、使用示例
    • 四、区别和联系
      • 1、区别
      • 2、联系
    • 五、总结

Springboot中@Autowired和@Resource注解的区别和联系

在这里插入图片描述

一、引言

在Spring框架中,@Autowired@Resource 是两种常用的依赖注入注解,它们都用于自动装配Bean,简化了开发者手动创建和管理Bean的繁琐工作。然而,它们的实现机制和使用方式有所不同。理解这两者的区别和联系,对于优化Spring应用的开发过程非常重要。

二、@Autowired注解

1、注解来源

@Autowired 是Spring框架提供的注解,专门用于依赖注入。

2、工作原理

  • 默认按类型自动装配(byType)。如果存在多个相同类型的Bean,则可以通过@Qualifier指定具体的Bean名称。
  • 可以通过设置@Autowired(required=false)来实现可选依赖注入,避免找不到匹配Bean时抛出异常。

3、使用示例

java复制

java">@Component
public class UserService {@Autowiredprivate UserRepository userRepository;public void performAction() {userRepository.save();}
}

在上面的示例中,UserService类中的userRepository@Autowired注解自动注入。Spring会根据类型(即UserRepository)来注入对应的Bean。

三、@Resource注解

1、注解来源

@Resource 是Java标准注解(JSR-250),在Spring中也得到了支持。

2、工作原理

  • 默认按名称自动装配(byName)。如果容器中没有与字段名称匹配的Bean,则会按类型自动装配。
  • 支持设置name属性来指定注入Bean的名称。

3、使用示例

java复制

java">@Component
public class UserService {@Resource(name = "userRepository")private UserRepository userRepository;public void performAction() {userRepository.save();}
}

在这个示例中,UserService类中的userRepository通过@Resource注解按名称装配。如果没有找到名称为userRepository的Bean,Spring会尝试按类型来装配。

四、区别和联系

1、区别

  • 来源@Autowired是Spring框架提供的,而@Resource是Java标准注解。
  • 默认装配方式@Autowired默认按类型装配,@Resource默认按名称装配,找不到则按类型装配。
  • 支持属性@Autowired支持required属性,@Resource支持name属性。
  • 适用场景@Autowired更适用于Spring项目,@Resource更适合需要兼容Java EE标准的场景。

2、联系

  • 两者都用于依赖注入,都可以通过名称或类型来指定要注入的Bean。
  • 在Spring项目中,两者都可以使用,但@Autowired的使用更为广泛。

五、总结

@Autowired@Resource都是Spring中常用的依赖注入注解,各有优势。@Autowired默认按类型装配,灵活性高,适合大多数Spring项目;@Resource默认按名称装配,更精确,适合需要兼容Java EE标准的场景。在实际开发中,可以根据具体需求选择合适的注解。


版权声明:本博客内容为原创,转载请保留原文链接及作者信息。

参考文章

  • SpringBoot | @Autowired 和 @Resource 的区别及原理分析

http://www.ppmy.cn/ops/156040.html

相关文章

Slint的学习

Slint是什么 Slint是一个跨平台的UI工具包,支持windows,linux,android,ios,web,可以用它来构建申明式UI,后端代码支持rust,c,python,nodejs等语言。 开源地址:https://github.com/slint-ui/slint 镜像地址:https://kkgithub.com/…

UE编辑器工具

如何自己制作UE小工具提高工作效率 在虚幻编辑器用户界面中,可以使用各种各样的可视化工具来设置项目,设计和构建关卡,创建游戏性交互等等。但有些时候,当你确定了需要编辑器执行的操作后,可能想要通过编程方式调用它…

2 [GitHub遭遇严重供应链投毒攻击]

近日,有黑客针对 Discord Top.gg 的GitHub 账户发起了供应链攻击,此次攻击导致账户密码、凭证和其他敏感信息被盗,同时也影响到了大量开发人员。 Checkmarx 在一份技术报告中提到,黑客在这次攻击中使用了多种TTP,其中…

Linux 进程终止

Linux 进程终止 引言1. 正常终止1.1 在 main() 函数中使用 return 语句1.2 调用 exit() 函数1.3 使用 _exit() 或 Exit() 函数疑问:_exit() 和 Exit() 的应用场景是什么? 1.4 最后一个线程退出时终止进程 2. 异常终止2.1 调用 abort() 函数2.2 接收到信号…

Java中初步使用websocket(springBoot版本)

一、什么是websocket WebSocket是一种在Web应用程序中实现实时双向通信的协议。它为浏览器和服务器之间提供了一种持久连接,在一个连接上可以双向传输数据。相比传统的HTTP协议,WebSocket具有更低的延迟和更高的效率。 WebSocket使用了类似于握手的方式来…

Python从0到100(八十七):CNN网络详细介绍及WISDM数据集模型仿真

前言: 零基础学Python:Python从0到100最新最全教程。 想做这件事情很久了,这次我更新了自己所写过的所有博客,汇集成了Python从0到100,共一百节课,帮助大家一个月时间里从零基础到学习Python基础语法、Pyth…

04树 + 堆 + 优先队列 + 图(D1_树(D17_综合刷题练习))

目录 1. 二叉树的前序遍历(简单) 1.1. 题目描述 1.2. 解题思路 方法一:递归(推荐使用) 方法二:非递归(扩展思路) 2. 二叉树的中序遍历(中等) 2.1. 题目…

事务02之锁机制

锁机制 文章目录 锁机制一:MySQL锁的由来与分类1:锁机制的分类 二:共享锁与排他锁1:共享锁(S锁)2:排他锁(X锁)3:锁的释放 二:表级别锁1:元数据锁(了解)2:意向锁3&#xf…