@Autowired和@Resource两个注解的异同点

前言

在之前分别写了关于@Autowired和@Resource注解的两篇博文,这里我们总结一下两个注解的异同点

相同点

  • 两个注解的作用都是完成Spring的依赖注入
  • 两个注解都是在各自bpp的postProcessMergedBeanDefinition方法中发现注入点,都是在各自bpp的postProcessProperties方法中完成依赖注入

不同点

来源不同

  • @Autowired:Spring相关注解
  • @Resource:Java规范定义的注解

作用范围不同

  • @Autowired : 属性、方法、构造方法
  • @Resource : 属性、方法

@Autowired用法案例

@Component
public class MixComponent {
 
    @Autowired
    private ComponentA componentA;
 
    private ComponentB componentB;
 
    private ComponentC componentC;
 
    @Autowired
    public void setComponentB(ComponentB componentB) {
        this.componentB = componentB;
    }
 
    public MixComponent() {
    }
 
    @Autowired
    public MixComponent(ComponentC componentC) {
        this.componentC = componentC;
    }
}

  @Resource用法案例 

@Component
public class MixComponent {
    
    @Resource
    private ComponentA componentA;
    
    private ComponentB componentB;

    @Resource
    public void setComponentB(ComponentB componentB) {
        this.componentB = componentB;
    }
}

PS :  @Autowired和@Resource都是不支持static的属性和方法的,@Autowired遇到static的属性和方法会忽略,@Resource遇到static的属性和方法会抛出异常

灵活程度不同

  • @Autowired : 可以通过设置required = false,实现宽松注入
  • @Resource : 必须注入,可以指定beanName

查找依赖的流程可能不同

为什么说查找依赖的流程可能不同,因为@Resource通过某些设置,其实是可以@Autowired查找方式相同,我听到的最多的说法就是@Autowired是先根据类型查找,再根据名称查找,@Resource是先根据名称查找,再根据类型查找。对于这个说法我先举个例子

@Component
public class House {
    
    @Resource(name = "dog1")
    private Dog dog;
}

@Component
public class Dog {

}

如果上述的说法是正确的,Spring容器应该能正常启动,但是实际会抛出异常

@Autowired查找依赖相关源码

 @Resource查找依赖相关源码

查找依赖流程图

 下列这种写法,@Autowired和@Resource查找依赖方法一样

@Component
public class House {
    
    @Resource
    private Dog dog1;
}

@Component
public class Dog {

}

PS:流程图不清晰可以保存到本地放大查看

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

关于安卓MPAnroidChart开发(一)直方图分组坑

背景 安卓开发一个图表显示数据,内容就是对直方图进行分组显示,大概示例如下: 开发环境 win10,as4,jdk8 开发 这里直接说重点。乱七八糟的就掠过了,最后会放出所有相关源码以及封装好的类。 如果对单组的直方图&#xff0c…

手机抓包也太简单好玩了吧!

我们选择Charles来作为抓包工具,本文将从0到1讲解从电脑端抓包到手机端抓包。 Charles是一款被广泛使用的网络抓包工具,它可以用来监控和调试通过HTTP和HTTPS协议发送和接收的所有网络请求和响应。Charles通常用于网页和网络应用的开发过程中&#xff0…

代码随想录 Day-23

力扣题目 406.根据身高重建队列 思路 这里可以看出来是有两个维度考虑,和力扣题目 135.分发糖果(可以看我day-22的文章) 有点类似。 因此遇到这种两个维度权衡的时候,一定是先考虑一个维度再按照另一个维度来重新考虑排序。 两…

YOLOv9有效改进|使用iRMB与RepNCSPELAN4融合

专栏介绍:YOLOv9改进系列 | 包含深度学习最新创新,助力高效涨点!!! 一、改进点介绍 iRMB是CVPR2023即插即用的到残差注意力机制。 本文使用iRMB与RepNCSPELAN4进行融合 二、iRMB-RepNCSPELAN4模块详解 2.1 模块简介 这…

Codeforces Round 935 (Div. 3)A~E

A. Setting up Camp 题目分析: 有三种人,内向、外向、综合,内向必须独自一个帐篷,外向必须3个人一个帐篷,综合介于1~3人一个帐篷,我们发现非法情况只会存在外向的人凑不成3个人一个帐篷的情况,因外向不够可…

AI视频激光综合驱鸟装置:全自动、大范围驱鸟 | 真驱鸟科技

在电力系统中,鸟害事故已成为一个不容忽视的问题,直接威胁到电网的正常运行。但鸟类拥有极强的环境适应能力,它们能够在各种环境中生存和繁衍。这种强大的适应性使得传统的单一功能驱鸟器,在面对鸟类时显得力不从心,无…

用OceanBase binlog service 轻松进行数据回滚

背景 在日常的数据库运维过程中,难免会遭遇数据误操作的情形,比如因疏忽而执行了非预期的delete或update操作,这时就需要进行数据回滚。如果在OceanBase中启用了回收站功能,并设置了合适的undo_retention,那么我们可以…

【Frida】10_用鼠标自动标记棋盘上的雷区(一键过关)

🛫 系列文章导航 【Frida】 00_简单介绍和使用 https://blog.csdn.net/kinghzking/article/details/123225580【Frida】 01_食用指南 https://blog.csdn.net/kinghzking/article/details/126849567【Frida】02_常见API示例及功能函数封装(snippets&#…

上海亚商投顾:沪指窄幅震荡微跌 低空经济概念股持续爆发

上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 一.市场情绪 三大指数昨日高开后回落,整体呈现小幅调整走势。低空经济概念持续爆发,永悦科技8连板&…

html5cssjs代码 032 边框属性示例

html5&css&js代码 032 边框属性示例 一、代码二、解释 该HTML文件定义了一个网页页面&#xff0c;主要介绍了HTML5中CSS边框属性的用法。 一、代码 <!DOCTYPE html> <html lang"zh-cn"><head><title>编程笔记 html5&css&j…

银河麒麟系统安装设备类型选择lvm简单模式之后,数据写入导致失败导致系统重启无法正常加载

银河麒麟系统安装设备类型选择lvm简单模式之后&#xff0c;数据写入导致失败导致系统重启无法正常加载 一 系统环境1.1 系统版本信息1.2 通过镜像安装的过程中选择设备类型选择的是lvm简单模式 二 问题描述三 问题修复过程3.1 挂载ISO镜像&#xff0c;引导到字符终端界面3.2 修…

什么是ip公网?

一、概念和作用 在计算机网络中&#xff0c;IP&#xff08;Internet Protocol&#xff09;是一种网络协议&#xff0c;用于将数据包从源主机传输到目标主机。而公网指的是能够被所有人访问的网络&#xff0c;与之相对应的是私有网络。IP公网即指能够在公共互联网中被访问和使用…

关系型数据库mysql(3)索引

目录 一.索引的概念 二.索引的作用 三.创建索引的原则依据 四.索引的分类 五.索引的创建 5.1 普通索引 5.1.1 直接创建索引 5.1.2 修改表方式创建 5.1.3 创建表的时候指定索引 5.2 唯一索引 5.2.1 直接创建唯一索引 5.2.2 修改表方式创建 5.2.3 创建表的时候指…

HTTP协议1

官网学习网址&#xff1a;HTTP | MDN 常规信息 常规请求头信息&#xff1a; 状态码&#xff1a; 200 正常响应 404 未找到资源 500 服务端一场的 3** 重定向 资源缓存 响应头信息&#xff1a; 客户端允许的请求方法类型 Access-Control-Allow-Methods: GET, POST, PUT, DELET…

1.3 Python是什么

Python是什么&#xff0c;Python简介 Python 是荷兰人 Guido van Rossum &#xff08;吉多范罗苏姆&#xff0c;中国程序员称其为“龟叔”&#xff09;在 1990 年初开发的一种解释型编程语言。 图1&#xff1a;Python 的标志&#xff08;Logo&#xff09; Python 的诞生是极具…

几个常用的控件(2)

目录 一、单选按钮Radiobutton和RadioButtonList 1、Radiobutton控件 &#xff08;1&#xff09;button控制方式 &#xff08;2&#xff09;Radiobutton控制方式 2、RadiobuttonList控件 二、列表框ListBox和下拉列表DropdownList 1、ListBox 2、DropdownList 三、面板…

macOS 通过 MacPorts 正确安装 MySQL 同时解决无法连接问题

如果你通过 sudo port install 命令正常安装了 MySQL&#xff0c;再通过 sudo port load 命令启动了 MySQL Server&#xff0c;此刻却发现使用 Navicat 之类的 GUI 软件无法连接&#xff0c;始终返回无法连接到 127.0.0.1 服务器。这是一个小坑&#xff0c;因为他默认使用了 So…

(day 15)JavaScript学习笔记(对象3)

概述 这是我的学习笔记&#xff0c;记录了JavaScript的学习过程。在写博客的时候我会尽量详尽的记录每个知识点。如果你完全没接触过JavaScript&#xff0c;那么这一系列的学习笔记可能会对你有所帮助。 今天继续学习对象&#xff0c;主要是Object.create()、原型链、修改原型指…

IPv6介绍

IPv6&#xff08;互联网协议版本6&#xff09;是用于互联网的最新网络层通信协议&#xff0c;旨在解决IPv4地址耗尽的问题&#xff0c;并提供了多项改进。IPv6于1998年由互联网工程任务组&#xff08;IETF&#xff09;标准化&#xff0c;作为IPv4的后继者。下面是IPv6的一些详细…

Linux - 应用层HTTPS、传输层TCP/IP模型中典型协议解析

目录 应用层&#xff1a;自定制协议实例 HTTP协议首行头部空行正文http服务器的搭建 HTTPS协议 传输层UDP协议TCP协议 应用层&#xff1a; 应用层负责应用程序之间的沟通—程序员自己定义数据的组织格式 应用层协议&#xff1a;如何将多个数据对象组织成为一个二进制数据串进行…
最新文章