首页 > 其他分享 >Spring面试题-@Autowired注解和@Resource注解的区别

Spring面试题-@Autowired注解和@Resource注解的区别

时间:2024-09-28 09:54:57浏览次数:3  
标签:面试题 Java Autowired Spring Resource Bean 注解

简要回答

@Autowired

默认情况下,@Autowired 是按类型(byType)自动装配的。如果 Spring 容器中恰好有一个匹配的 bean 类型,它将自动注入这个 bean。如果有多个相同类型的 bean,则需要通过 @Qualifier 注解来指定注入哪一个 bean。此外,@Autowired 也可以按名称(byName)装配,但这通常需要与 @Qualifier 注解结合使用,或者将 required 属性设置为 false 并依赖于 Java 8 的默认方法或字段初始化器。

@Resource

@Resource 注解提供了两种装配方式:按名称(byName)和按类型(byType)。默认情况下,它是按名称装配的。如果找不到匹配的 bean,则回退到按类型查找。

深入理解

1、定义与来源

@Autowired

@Autowired是Spring框架提供的注解,主要用于自动装配Spring容器中的Beans。通过@Autowired,Spring会根据类型(Type)来自动查找适合的Bean并注入。

@Resource

@Resource注解来自Java标准规范(JSR-250),是Java EE(Enterprise Edition)的一部分。它允许Java EE容器管理Beans的依赖关系,支持按名称(Name)和类型(Type)进行注入。

2、注入方式

@Autowired

默认情况下,@Autowired按类型注入,如果有多个同类型的Bean,Spring会抛出NoSuchBeanDefinitionException异常。这种情况下,可以使用@Qualifier注解来指定要注入的Bean的名称。它也可以与其他Spring注解(如@Component, @Service, @Controller等)结合使用,灵活性较高。

@Resource

@Resource默认情况下是根据名称注入;它会优先查找与字段名称匹配的Bean。如果找不到对应名称的Bean,则会再根据类型查找。@Resource不像@Autowired那样依赖于Spring特有的功能,因此它可以在Java EE环境中获得更好的兼容性。

3、特性

@Autowired

  • 灵活性:支持按类型自动装配,配合@Qualifier可指定具体的Bean,能更好地处理复杂的依赖关系。
  • 必填@Autowired具有required属性,默认情况下为true。这意味着如果找不到适合的Bean,会抛出异常。可以将required设置为false,以允许注入为null。
  • 构造函数、Setter和字段@Autowired不仅支持字段注入,还可以用于构造函数和Setter方法。

@Resource

  • 遵循Java EE规范:相较于@Autowired@Resource更符合Java EE的标准,可以在一些Java EE容器中很好地工作。
  • 按名称优先@Resource优先按名称查找Bean,这有助于简化命名规则下的注入,减少问题的发生。
  • 不支持required属性@Resource没有提供类似required的属性,因此在找不到适合的Bean时,它不会直接抛出异常,而是可能会导致其他问题。

4、适用场景

@Autowired

  • 在Spring应用中,如果需要根据类型进行灵活的依赖管理,使用@Autowired是更加合适的选择。
  • 在需要进行复杂的依赖管理,比如需要指定不同的实现时,结合使用@Autowired@Qualifier会更方便。

@Resource

  • 在Java EE环境中,尤其是与EJB(Enterprise Java Beans)结合使用时,@Resource会更好地发挥作用。
  • 当Bean的结构和命名相对固定且不需要过多的变化时,使用@Resource既简单又有效。
import org.springframework.beans.factory.annotation.Autowired;
import javax.annotation.Resource;

public class MyService {

    // 使用 @Autowired 注解
    @Autowired
    private MyRepository myRepository;

    // 使用 @Resource 注解
    @Resource
    private AnotherService anotherService;

    public void perform() {
        // 使用注入的Bean
        myRepository.doSomething();
        anotherService.execute();
    }
}

标签:面试题,Java,Autowired,Spring,Resource,Bean,注解
From: https://blog.csdn.net/qq_50801874/article/details/142591760

相关文章

  • 集合论(ZFC)之 幂集公理(Axiom of Power Set)注解
            集合论(ZFC)之幂集公理(AxiomofPowerSet)定义了给定一个集合X,存在一个集合Y为该集合X的幂集,记Y=P(X),其包含了集合X的所有子集(Subset)。    子集关系的定义为,如果集合U的所有元素,都是集合X的元素,那么集合U就是集合X的子集,记U ⊂X,有∀z(z∈U→......
  • Java面试题及答案整理汇总(2024最新版)
    前言辞退了老板,准备找下家,又要开始面试了,不得不准备准备八股文,还是很有必要针对性的刷一些题,很多朋友的实战能力很强,但是理论比较薄弱,要多准备准备理论知识,攻克面试官。这是我在全网寻找稍微比较完整的面试题,分享给大家**2024面试资料整理**tip:不止是收藏~学到才是自己的......
  • Qt面试题
    什么是Qt的元对象系统?点击查看代码Qt的元对象系统是Qt框架中一个核心的组成部分,提供了一种机制来拓展C++的功能,Qt的元对象系统(Meta-ObiectSystem)提供了对象之间通信的信号与槽机制、运行时类型信息和动态属性系统。元对象系统由以下三个基础组成。1.QObiect类是所有......
  • 安全类面试题
    1、简述ASA防火墙CONN表五元组的内容源IP地址、目的IP地址、源端口号、目的端口号、TCP/UDP协议2、ASA防火墙inside和outside接口之间访问时,遵从的默认规则允许出站(outbound)连接、禁止入站(inbound)连接3、简述DMZ区域的概念和作用DMZ称为“隔离区”,也称......
  • 大厂面试题-如何计算最大同时在线人数
    1/题目背景现有各直播间的用户访问记录表(live_events),表中每一条记录表示,一个用户何时进入了一个直播间,又在何时离开了该直播间。现请你统计各直播间最大同时在线人数。2/数据准备--创建live_events表CREATETABLElive_events(event_idINTPRIMARYKEYAUTO_INCR......
  • 8,(经典面试题:分组求topN)Python数分之Pandas训练,力扣,1532. 最近的三笔订单
    学习:知识的初次邂逅复习:知识的温故知新练习:知识的实践应用目录一,原题力扣链接二,题干三,建表语句四,分析五,Pandas解答六,验证七,知识点总结一,原题力扣链接.-力扣(LeetCode)二,题干表:Customers+---------------+---------+|ColumnName|Type|+------......
  • 26,【经典大厂面试题】【连续问题的困难题】Python数分之Pandas训练,力扣,2173. 最多连胜
    学习:知识的初次邂逅复习:知识的温故知新练习:知识的实践应用目录一,原题力扣链接二,题干三,建表语句四,分析五,SQL解答六,验证七,知识点总结一,原题力扣链接.-力扣(LeetCode)二,题干表: Matches+-------------+------+|ColumnName|Type|+-------------+-----......
  • 【Kubernetes】常见面试题汇总(四十二)
    目录96.Kubernetes体系结构有哪些不同的组成部分?97.您能否简要介绍一下Kubernetes中主节点的工作?特别说明:题目  1-68  属于【Kubernetes】的常规概念题,即“汇总(一)~(二十二)”。题目69-113属于【Kubernetes】的生产应用题。96.Kubernetes体系结构有哪些......
  • 【Kubernetes】常见面试题汇总(四十一)
    目录94.iptables四个表五个链。95.Kubernetes如何简化容器化部署?特别说明:题目  1-68  属于【Kubernetes】的常规概念题,即“汇总(一)~(二十二)”。题目69-113属于【Kubernetes】的生产应用题。94.iptables四个表五个链。(1)iptables四个表:raw表:确定是否......
  • 【Kubernetes】常见面试题汇总(三十八)
    目录 91.Docker的网络通信模式。特别说明:题目  1-68  属于【Kubernetes】的常规概念题,即“汇总(一)~(二十二)”。题目69-113属于【Kubernetes】的生产应用题。91.Docker的网络通信模式。Docker的4种网络通信模式:1、host模式:-host模式,使用--net=ho......