高级java每日一道面试题-2024年12月20日-Spring篇-Autowired和Resource注解的区别?

news/2024/12/21 17:53:07/

如果有遗漏,评论区告诉我进行补充

AutowiredResource_1">面试官: AutowiredResource关键字的区别?

我回答:

在Java高级面试中,@Autowired@Resource是两个经常被提到的注解,它们主要用于Spring框架中的依赖注入。下面是对这两个注解的详细解释和它们之间的区别:

Autowired_5">一、@Autowired注解

  1. 来源@Autowired是Spring框架提供的注解,用于实现自动装配。
  2. 注入方式@Autowired可以用在字段、构造方法、Setter方法上,用于实现自动装配。Spring会根据类型(by type)进行自动匹配。
  3. 匹配规则
    • 当有多个类型匹配时,Spring会根据类型选择合适的bean进行注入。
    • 如果存在多个相同类型的bean,可以使用@Qualifier注解指定要注入的bean的名称。
  4. 依赖查找顺序@Autowired首先根据类型进行查找,如果存在多个相同类型的bean,则再根据名称进行查找。
  5. 参数@Autowired只支持一个required参数,表示是否开启自动注入,默认是true,要求依赖对象必须存在。如果允许null值,可以设置为false

Resource_15">二、@Resource注解

  1. 来源@Resource是Java EE的规范,是JSR-250规范定义的注解,也是Java标准的一部分。它同样可以在Spring应用中使用,但不同于@Autowired,它并不是Spring的特有注解。
  2. 注入方式@Resource可以用在字段、Setter方法上,也可以用在配置文件的bean定义上(虽然不常见)。它默认按照名称(by name)进行自动装配,但也支持按照类型进行匹配。
  3. 匹配规则
    • 如果指定了name属性,则按照指定的名称进行匹配。
    • 如果没有指定name属性,则默认按照字段名或方法名进行匹配。
    • 如果找不到与名称匹配的bean,则按照类型进行匹配。
  4. 依赖查找顺序@Resource首先根据名称进行查找,如果找不到匹配的bean,则再按照类型进行查找。
  5. 参数@Resource支持多个参数,其中最重要的两个参数nametype。通过这两个参数,可以精确地指定要注入的bean。

AutowiredResource_26">三、@Autowired和@Resource的区别

  1. 来源不同@Autowired是Spring框架提供的注解,而@Resource是Java EE的规范。
  2. 注入方式不同@Autowired主要用在字段、构造器和Setter方法上,而@Resource可以用在字段、Setter方法上,还可以用在配置文件的bean定义上(虽然不常见)。
  3. 匹配规则和查找顺序不同@Autowired默认按照类型进行匹配,如果存在多个相同类型的bean,则再根据名称进行查找;而@Resource默认按照名称进行匹配,如果找不到匹配的bean,则再按照类型进行查找。
  4. 参数不同@Autowired只支持一个required参数,而@Resource支持多个参数,包括nametype等。
  5. 兼容性:在Spring应用中,@Autowired@Resource都可以用于依赖注入,但@Autowired是Spring特有的注解,与Spring框架的集成度更高;而@Resource作为Java EE的规范,在跨平台、跨框架的应用中可能更具兼容性。
特性@Autowired@Resource
注解来源Spring 框架Java EE (Jakarta EE) 标准
默认注入方式按类型 (byType)按名称 (byName),若找不到则按类型
支持的作用位置构造函数、字段、setter 方法字段、setter 方法
是否推荐构造器注入是,特别是对于必须依赖
自动装配策略支持多种模式,默认为 byType默认为 byName
可选性配置required=falsename=""lookup-method

四、使用建议

  1. 当一个接口类只有一个实现类时,@Autowired@Resource都可以使用,但@Resource不会触发IDE的警告或错误提示。
  2. 当一个接口类有多个实现类时,应谨慎使用@Autowired,因为它可能会导致不明确的依赖注入。此时,可以结合@Qualifier注解来指定要注入的bean的名称,或者使用@Resource并通过name属性来精确指定要注入的bean。

http://www.ppmy.cn/news/1556979.html

相关文章

如何创建属于自己的大语言模型:从零开始的指南

如何创建属于自己的大语言模型:从零开始的指南 为什么要创建自己的大语言模型? 随着人工智能的快速发展,大语言模型(LLM)在各种场景中表现出了卓越的能力,例如文本生成、对话交互和内容总结等。虽然市场上…

Unity复刻胡闹厨房复盘 模块一 新输入系统订阅链与重绑定

本文仅作学习交流,不做任何商业用途 郑重感谢siki老师的汉化教程与代码猴的免费教程以及搬运烤肉的小伙伴 版本:Unity6 模板:3D 核心 渲染管线:URP ------------------------------…

java线程共享模型之管程(synchronized原理、wait-notify、park方法)

文章目录 前言一、 变量的线程安全分析1.1 成员变量与静态变量是否线程安全?1.2 局部变量是否线程安全?1.3 局部变量线程安全分析具体举例:1. 局部变量引用的对象没有逃离方法作用域 :2. 局部变量引用的对象逃离了方法作用域 &…

C++设计模式:组合模式(公司架构案例)

组合模式是一种非常有用的设计模式,用于解决**“部分-整体”**问题。它允许我们用树形结构来表示对象的层次结构,并且让客户端可以统一地操作单个对象和组合对象。 组合模式的核心思想 什么是组合模式? 组合模式的目的是将对象组织成树形结…

多音轨视频使用FFmpeg删除不要音轨方法

近期给孩子找宫崎骏动画,但是有很多是多音轨视频但是默认的都是日语,电视上看没办法所以只能下载后删除音轨文件只保留中文。 方法分两步,先安装FFmpeg在转文件即可。 第一步FFmpeg安装 FFmpeg是一个开源项目,包含了处理视频的…

HTMLCSS:酷炫的3D开关控件

这段代码创建了一个具有 3D 效果的开关控件&#xff0c;当用户点击滑块时&#xff0c;滑块会移动到开关的另一侧&#xff0c;同时改变背景颜色&#xff0c;模拟开关的开启和关闭状态。动画效果增加了页面的互动性和视觉吸引力。 演示效果 HTML&CSS <!DOCTYPE html>…

React 工具和库面试题(一)

1. 如何在 React 项目中使用 Hooks 从服务端获取数据&#xff1f; 在 React 中&#xff0c;我们通常使用 useEffect Hook 来进行副作用操作&#xff0c;比如从服务端获取数据&#xff0c;结合 useState 来管理数据状态。 基本步骤&#xff1a; 使用 useEffect 来执行异步操作…

BERT模型入门(2)BERT的工作原理

文章目录 如名称所示&#xff0c;BERT&#xff08;来自Transformer的双向编码器表示&#xff09;是基于Transformer模型。我们可以将BERT视为只有编码器部分的Transformer。 在上一个主题《Transformer入门》中&#xff0c;我们了解到将句子作为输入喂给Transformer的编码器&a…