Spring中@Resource和@Autowire注解的区别

news/2024/7/7 7:38:47

文章目录

  • 一、@Resource和@Autowire注解的区别
  • 二、详细说明
    • 什么是同类型的Bean
  • 总结


一、@Resource和@Autowire注解的区别

@Resource和@Autowired都是用来进行依赖注入的注解,但是它们有一些不同之处。

@Autowired是Spring框架中的注解,它可以用来标注字段、构造函数、方法等,表示需要自动装配。它可以用来注入依赖的bean。如果有多个bean符合条件,可能会抛出异常。

@Resource是Java自带的注解,它可以用来标注字段、方法等,表示需要自动装配。它可以用来注入依赖的bean。如果有多个bean符合条件,会按照名称进行匹配。

总结:

  • @Autowired 是 Spring 框架中的注解,用来标注需要自动装配的 bean。
  • @Resource 是 Java 自带的注解,用来标注需要自动装配的 bean。
  • @Autowired 是按类型装配,如果有多个同类型的 bean,会抛出异常; @Resource 是按名称装配,如果名称不存在,会使用类型装配。

二、详细说明

下面是一个使用@Autowired和@Resource注解进行依赖注入的示例:
代码如下(示例):

// 定义一个服务类
@Service
public class MyService {
    // 使用@Autowired注入一个Dao
    @Autowired
    private MyDao myDao;
}

// 定义一个Dao类
@Repository
public class MyDao {
    // 使用@Resource注入一个DataSource
    @Resource
    private DataSource dataSource;
}

使用@Autowired 注解,会按类型装配,如果有多个同类型的 bean,会抛出异常。
使用@Resource 注解,会按名称装配,如果名称不存在,会使用类型装配。

  • 如果你的项目中没有多个同类型的bean,那么@Autowired和@Resource是可以互换使用的,如果有多个同类型的bean,那么就要使用@Resource进行指定名称注入。
  • 如果有多个同类型的bean,但是你没有使用@Resource进行名称指定,就会抛出异常,所以在使用@Autowired注解时,要确保只有一个同类型的bean。

什么是同类型的Bean

在上面的示例中,同类型的bean指的是有多个类型为MyDao的bean存在于Spring容器中,如果使用@Autowired注解进行注入的话,Spring容器并不知道应该注入哪一个MyDao类型的bean,因此会抛出异常。

换句话说就是如果你在项目中有多个类都是实现了同一个接口或者继承了同一个类,并且这些类都被标记为了@Service,@Repository等等,并且你在其他地方使用了这个接口或者类进行了注入,那么就会出现多个同类型的bean的情况。

比如说你有两个类A和B都是实现了接口I,并且都是被标记为了@Service的,那么当你在其他地方使用I进行注入的时候,就会出现多个同类型的bean的情况。


总结

总的来说,@Autowired和@Resource都是用来进行依赖注入的注解,但是它们有一些不同之处:

  • @Autowired 是 Spring 框架中的注解,用来标注需要自动装配的 bean,默认按类型装配,如果有多个同类型的 bean,会抛出异常。
  • @Resource 是 Java 自带的注解,用来标注需要自动装配的 bean,按照名称进行装配,如果名称不存在,会使用类型装配。

如果你的项目中没有多个同类型的bean,那么@Autowired和@Resource是可以互换使用的,如果有多个同类型的bean,那么就要使用@Resource进行指定名称注入。

提示:更多内容可以访问Clang’s Blog:https://www.clang.asia


http://www.niftyadmin.cn/n/2521472.html

相关文章

使用Collections.sort方法来对自定义对象进行排序

文章目录一、基本使用方法二、利用compare来实现一、基本使用方法 Collections.sort方法可以用来对自定义对象进行排序。要实现这一点,需要在调用该方法时传入一个比较器,该比较器用于指定如何比较对象中的值。 举个例子,假设有一个自定义对…

CentOS7一键安装python3

文章目录一、更新OpenSSL二、安装Python一、更新OpenSSL 1、安装依赖,下载安装包 yum install -y gcc libffi-devel zlib* openssl-devel libffi-devel zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make perl …

ActionScript mxml flex 日期格式化 DateFormatter

跟Java很相似。都是使用一个格式化类来进行格式化: 第一步:var dateFormatter:DateFormatternew DateFormatter();//生成格式化对象 第二步:dateFormatter.formatString”YYYY-MM-DD JJ:NN:SS”;//设定格式 第三步:dateFormatt…

Java编程:Beanutils-No origin bean specified问题分析

Beanutils.copyProperties 异常一: No origin bean specified Beanutils.copyProperties 异常二: No destination bean specifiedBeanutils.copyProperties的源码:public void copyProperties(Object dest, Object orig) throws IllegalAccessException,…

开发中遇到的flex安全沙箱的问题

开发中遇到了安全沙箱的问题,一下有几种解决方案: 1. 播放器在 8.0 以上可以使用通配符 “*” 来允许所有域: System.security.allowDomain("*"); 如果要允许多个域,可以用逗号隔开: Syst…

C# []、Array、List、ArrayList 区别

[] 是针对特定类型、固定长度的。 Array 是针对任意类型、固定长度的。 List 是针对特定类型、任意长度的。 ArrayList 是针对任意类型、任意长度的。

RDA DEBUG

DEBUG寄存器:word 0xa0000010 word 0xa0000010 1  //debug开 word 0xa0000010 0  //debug关 当然也可以按模块打开/关闭debug信息,如 DBGCFG_KMF/DBGCFG_UMF/DBGCFG_MENU/DBGCFG_TUNER模块等。 所以大家在使用过程中要按源文件所在的模块加打印信息&…

ETL工具——kettle插件开发(基础篇)

在我们做ETL工作的时候,在某些项目中往往会遇到一些特别的流程任务,kettle原有的流程处理节点已经不能满足我们的要求,这时候我们就需要定制流程处理节点了。定制流程节点主要是针对数据的管理、数据的验证和某些特别文件数据的提取。大家通过…