首页 > 其他分享 >@AutoWired和@Resource的区别

@AutoWired和@Resource的区别

时间:2024-07-08 17:55:00浏览次数:9  
标签:Resource 区别 Spring AutoWired BookRepository bookRepository 注入

@AutoWired和@Resource的区别

  1. 来源不同:
    1. @AutoWired是Spring提供的注解.
    2. @Resource是Java EE提供的,来源于java.annotation包,是JSR-250的一部分,所以,@Resource不是Spring特有的,它可以使用在所有遵循Java EE标准的项目中。
  2. 注入方式不同:
    1. @AutoWired默认是按照byType进行依赖注入的,也就是变量的类型,如果存在多个同样类型的Bean,Spring机会进一步使用变量名进行匹配。
    2. @Resource默认是按照byName进行依赖注入的,也就是变量名。
    3. 代码示例:
      // @Autowired示例
      public class BookService {
      
          @Autowired // 默认按照BookRepository进行注入依赖
          private BookRepository bookRepository;
      
      }
      
      // @Resource示例
      public class BookService {
      
          // 使用 @Resource 默认按照来按bookRepository(名称)注入依赖
          @Resource
          private BookRepository bookRepository;
      
      }
      

  3. 可定制性:
    1. @AutoWired可以和@Qualifier一起使用,@Qualifier允许指定注入哪一个bean。
    2. @Resource是按照name进行注入的。
    3. 代码示例:
      // @AutoWired和@Qualifier一起使用,@Qualifier指定注入哪一个bean。
      public class BookService {
      
          @Autowired // 默认按照BookRepository进行注入依赖
          @Qualifier("bookRepository")
          private BookRepository bookRepository;
      
      
      }
      

  4. 必须性
    1. @AutoWired默认是必须注入的,如果它在SpringIOC容器中找不到这个bean,就会抛出异常。但是可以通过将@AutoWired的required属性设置为false,就可以改变这个必须性。
    2. @Resource默认不是必须的,如果在IOC容器中找不到对应的Bean,会让程序继续运行,然后将该字段不会被设置,就是null。
    3. 代码示例:
         
      // 设置@AutoWired的required属性为false。
      public class BookService {
      
           @Autowired(required = false) 
          private BookRepository bookRepository;
      
      
      }
      

  5. 兼容性:
    1. @AutoWired是Spring特有的,只能在Spring相关依赖的项目中使用。
    2. @Resource使用所有遵循javaEE规范的项目中,更加通用。

在实际使用时,你应根据自己的具体需求和环境选择两者之一。如果你完全在Spring环境中工作,@Autowired是一个不错的选择,因为它能充分利用Spring容器的各项功能。如果你希望你的应用更加可移植,或者遵循Java EE标准,选择@Resource可能更合适。

标签:Resource,区别,Spring,AutoWired,BookRepository,bookRepository,注入
From: https://blog.csdn.net/m0_64466960/article/details/140275035

相关文章

  • EasyCVR视频汇聚平台:存储系统怎么选?分布式存储vs.集中式存储的区别在哪?
    在当今的数字化时代,安防监控已成为维护社会秩序和公共安全的重要手段。随着监控设备的普及和监控数据的不断增加,如何高效、安全地存储和管理这些视频数据,成为了安防行业面临的重要挑战。EasyCVR视频存储系统凭借其卓越的性能和灵活的架构,为安防行业提供了一个理想的解决方案。一......
  • Java工程中读取resources目录下properties文件的方式,从上图可知,当工程部署在服务器下
    Java工程中读取resources目录下properties文件的方式,从上图可知,当工程部署在服务器下时,配置文件以及代码都是在对应的classes文件夹下二、具体读取方法1、当需要读取当前路径下的properties文件时,即在本地没有部署到具体服务器上的情况:Filefile=newFile(“src/main/re......
  • 前端??和||的区别
    constuser={profile:{name:'张三'}};constuserName=user.profile?.name??'匿名';//结果:userName='张三'此代码首先演示了如何使用可选链运算符(?.)安全地访问user.profile的name值。如果user.profile是undefined或null,它会短路并返回undefined,从而避......
  • TCP/IP模型和OSI模型的区别(面试题)
    OSI模型,是国际标准化组织ISO制定的用于计算机或通讯系统键互联的标准化体系,主要分为7个层级:物理层数据链路层网络层传输层会话层表示层应用层虽然OSI模型在理论上更全面,但是在实际网络通讯中,TCP/IP模型更加实用,TCP/IP分为四个层级:应用层传输层网际层网络接口层应用层:该层对......
  • Win11系统提示找不到JSC.Resources.dll文件的解决办法
    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库,这时你可以下载这个JSC.Resources.dll文件(挑选合适的版本文件)......
  • python函数和c的区别有哪些
    Python有很多内置函数(buildinfunction),不需要写头文件,Python还有很多强大的模块,需要时导入便可。C语言在这一点上远不及Python,大多时候都需要自己手动实现。C语言中的函数,有着严格的顺序限制,如果要调用函数,该函数需要在本次调用之前就需要被实现,或者在程序开头事先声明,而Py......
  • Apache/InLong InLong Manager 支持配置 Flink 任务并发度/Adjust sort resources acc
    audit已经实现了对于InLong系统的Agent、DataProxy、Sort模块的入流量、出流量进行实时审计对账。对账的粒度有分钟、小时、天三种粒度。audit的数据缓存在org.apache.inlong.audit.cache的各个类中,有DayCacheHalfHourCache等等请求audit数据的api在org.apache.inlong.audit.......
  • 深度解析:机器学习与深度学习的关系与区别
    一、前言在人工智能领域,机器学习与深度学习常常被提及并广泛应用。虽然它们在本质上都是通过数据训练模型以进行预测或分类,但两者之间存在着显著的区别和联系。本文将深入解析机器学习与深度学习的关系与区别,帮助读者更好地理解和应用这两种技术。二、机器学习概述定义机器......
  • IDE ATA/ATAPI 控制器是一个硬件设备的接口,用于连接硬盘驱动器、光驱和其他存储设备到
    IDEATA/ATAPI控制器是一个硬件设备的接口,用于连接硬盘驱动器、光驱和其他存储设备到计算机的主板。关于其驱动的安装与未安装的区别、重要性和价值可以从以下几个方面来理解:区别:已安装驱动:正常工作:安装了适当的驱动程序后,IDEATA/ATAPI控制器能够正确地识别和管理连接的......
  • AI算法/模型/框架/模型库...都是什含义区别和联系?
    AI算法、模型、框架、模型库…都是什含义/区别和联系?算法、模型、模型库、框架什么是算法(Algorithm)?算法(Algorithm):算法是解决某一特定问题的步骤或规则集合。在AI/ML领域中,算法是用于训练模型、优化参数和执行推理的数学规则和计算方法。算法是模型训练的核心,通过......