当前位置: 首页 > article >正文

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

文章目录

  • 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复制

@Component
public class UserService {
    @Autowired
    private 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复制

@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.kler.cn/a/531841.html

相关文章:

  • 第28节课:前端项目实战—从需求分析到开发流程的全方位指南
  • 什么是Rust?它有什么特点?为什么要学习Rust?
  • Kafka流式计算架构
  • Deep Sleep 96小时:一场没有硝烟的科技保卫战
  • 【leetcode练习·二叉树拓展】归并排序详解及应用
  • LeetCode 404.左叶子之和
  • Docker 安装详细教程(适用于CentOS 7 系统)
  • 金山打字游戏2010绿色版,Win7-11可用DxWnd完美运行
  • 【PyQt】getattr动态访问对象的属性
  • leetcode——二叉树展开为链表(java)
  • 从 C 到 C++:理解结构体中字符串的存储与操作
  • chrome浏览器chromedriver下载
  • 大数据数仓实战项目(离线数仓+实时数仓)1
  • 《逆向工程核心原理》第一~二章知识整理
  • Vue 3 30天精进之旅:Day 13 - 路由守卫
  • python-leetcode-二叉树的层序遍历
  • 【论文公式】MathType打大写手写字母
  • ANSYS Workbench打开cdb文件
  • Vue-el挂载点
  • 安装及使用Tomcat
  • 软件测试 - 概念篇
  • Python MVC框架和其他Web框架有什么区别?
  • (电脑版)植物大战僵尸幼儿园版本,开启你的冒险之旅!
  • 加载数据,并切分
  • 计算机网络笔记再战——理解几个经典的协议1
  • Leetcode:680