SpringBoot注解篇之@Resource与@Autowired的使用区别

 更新时间:2023年12月26日 15:08:34   作者:AK@  
@Resource 注解和 @Autowired 注解都是在 Spring Framework 中进行依赖注入的注解,那么你知道他们有什么区别吗,本文就来介绍一下

一、@Resource与@Autowired的区别

@Resource 注解和 @Autowired 注解都是在 Spring Framework 中进行依赖注入的注解,但它们之间有一些区别:

1. 来源不同:

@Resource 注解是由 Java EE 提供的注解,它定义在 javax.annotation.Resource 包下。
@Autowired 注解是由 Spring 提供的注解,它定义在 org.springframework.beans.factory.annotation.Autowired 包下。

2. 依赖注入策略不同:

@Resource 注解默认按照名称进行依赖注入,如果有多个具有相同类型的依赖,可以使用 name 属性指定依赖的名称。
@Autowired 注解默认按照类型进行依赖注入,如果有多个具有相同类型的依赖,可以使用 @Qualifier 注解或者 @Primary 注解指定依赖的名称或主要依赖。

3. 兼容性不同:

@Resource 注解属于 Java EE 标准的注解,在 Java EE 环境中可以正常使用。
@Autowired 注解是 Spring Framework 提供的特定于 Spring 的注解,它可以在 Spring 环境下使用。

4. 注解属性不同:

@Resource 注解可以添加 name 属性来指定依赖的名称,还可以添加 mappedName 属性来指定依赖的 JNDI 名称。
@Autowired 注解可以添加 required 属性来指定依赖是否必须,默认为 true。
综上所述,@Resource 注解和 @Autowired 注解在功能上有一些相似之处,但也有一些区别。如果你在 Java EE 环境中使用依赖注入,可以选择使用 @Resource 注解;如果在 Spring Framework 环境中使用依赖注入,可以选择使用 @Autowired 注解。需要根据具体的情况选择适合的注解进行依赖注入。

二、@Resource详解

@Resource 是 Java EE 的注解之一,它用于进行依赖注入。@Resource 注解可以应用于字段、方法、参数或者类上。

在 Spring Framework 中,@Resource 注解是由 Spring 提供的用于进行依赖注入的注解之一。当我们在类中使用 @Resource 注解时,Spring 会自动将匹配的依赖注入到目标字段或方法中。

@Resource 的使用方式有以下几种:

注解应用在字段上:

@Resource
private SomeDependency someDependency;

注解应用在 setter 方法上:

private SomeDependency someDependency;

@Resource
public void setSomeDependency(SomeDependency someDependency) {
    this.someDependency = someDependency;
}

注解应用在构造函数上:

private SomeDependency someDependency;

@Resource
public MyService(SomeDependency someDependency) {
    this.someDependency = someDependency;
}

注解应用在方法的参数上:

private SomeDependency someDependency;

@Resource
public void someMethod(@Resource SomeDependency someDependency) {
    this.someDependency = someDependency;
}

需要注意的是,@Resource 注解默认按照名称进行匹配依赖注入。如果有多个具有相同类型的依赖,可以使用 name 属性指定依赖的名称。

@Resource(name = "someDependency2")
private SomeDependency someDependency;

此外,@Resource 注解还可以添加 mappedName 属性来指定依赖的 JNDI 名称。

总结来说,@Resource 注解是用于进行依赖注入的注解,它可以应用于字段、方法、参数或者类上。默认按照名称进行依赖匹配,也可以通过 name 属性或者 mappedName 属性指定依赖的名称。在 Spring Framework 中,@Resource 注解与 @Autowired 注解类似,但略有区别。

三、@Autowired详解

@Autowired 是 Spring Framework 中用于进行依赖注入的注解之一。它可以用于自动装配依赖关系,使得在需要使用某个依赖时,Spring 可以自动将合适的实例注入到目标对象中。

@Autowired 注解可以应用于字段、构造函数、setter 方法和方法的参数上。

使用 @Autowired 注解时,Spring 会根据类型进行依赖匹配,它会尝试找到与目标类型匹配的依赖,并将其注入到目标对象中。如果存在多个匹配的依赖时,可以使用 @Qualifier 注解来指定具体注入哪个实例。

下面是 @Autowired 注解的几种用法:

注解应用在字段上:

@Autowired
private SomeDependency someDependency;

注解应用在构造函数上:

private SomeDependency someDependency;

@Autowired
public MyService(SomeDependency someDependency) {
    this.someDependency = someDependency;
}

注解应用在 setter 方法上:

private SomeDependency someDependency;

@Autowired
public void setSomeDependency(SomeDependency someDependency) {
    this.someDependency = someDependency;
}

注解应用在方法的参数上:

private SomeDependency someDependency;

@Autowired
public void someMethod(SomeDependency someDependency) {
    this.someDependency = someDependency;
}

需要注意的是,默认情况下,@Autowired 注解要求依赖必须存在,即依赖对象不能为空。如果想要指定依赖为非必需,可以设置 required 属性为 false。

@Autowired(required = false)
private SomeDependency someDependency;

此外,@Autowired 注解还可以与 @Qualifier 注解一起使用,从而精确指定要注入的依赖实例。

总结来说,@Autowired 注解是 Spring Framework 中用于进行依赖注入的注解,它可以应用于字段、构造函数、setter 方法和方法的参数上。它根据类型进行依赖匹配,默认要求依赖必须存在,可以使用 @Qualifier 注解指定具体注入哪个实例,也可以设置 required 属性为 false 来声明依赖为非必需。使用 @Autowired 可以简化代码,减少手动注入的工作量。

到此这篇关于SpringBoot注解篇之@Resource与@Autowired的使用区别的文章就介绍到这了,更多相关SpringBoot @Resource与@Autowired内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Spring Validation参数效验的各种使用姿势总结

    Spring Validation参数效验的各种使用姿势总结

    在实际项目中经常需要对前段传来的数据进行校验,下面这篇文章主要给大家介绍了关于Spring Validation参数效验的各种使用姿势,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-04-04
  • Java OpenCV利用KNN算法实现图像背景移除

    Java OpenCV利用KNN算法实现图像背景移除

    这篇文章主要为大家介绍了Java OpenCV利用K最邻近(KNN,K-NearestNeighbor)分类算法实现图像背景移除的示例代码,需要的可以参考一下
    2022-01-01
  • 学会IDEA REST Client后就可以丢掉postman了

    学会IDEA REST Client后就可以丢掉postman了

    这篇文章主要介绍了学会IDEA REST Client后就可以丢掉postman了,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12
  • Netty实现自定义协议编解码器

    Netty实现自定义协议编解码器

    这篇文章主要为大家介绍了Netty实现自定义协议编解码器示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-02-02
  • Java内存管理垃圾回收基础详解

    Java内存管理垃圾回收基础详解

    这篇文章主要为大家介绍了Java内存管理垃圾回收基础详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-06-06
  • Java怎么重命名 Amazon S3 中的文件和文件夹

    Java怎么重命名 Amazon S3 中的文件和文件夹

    在本文中,我们探讨了使用适用于 Java 的 AWS 开发工具包重命名 S3 存储桶中的文件和文件夹的方法,我们探索了两种不同的情况,它们使用相同的概念来重命名对象,用新名称复制它们并删除原始名称
    2023-10-10
  • springboot下添加全局异常处理和自定义异常处理的过程解析

    springboot下添加全局异常处理和自定义异常处理的过程解析

    在spring项目中,优雅处理异常,好处是可以将系统产生的全部异常统一捕获处理,自定义的异常也由全局异常来捕获,如果涉及到validator参数校验器使用全局异常捕获也是较为方便,这篇文章主要介绍了springboot下添加全局异常处理和自定义异常处理,需要的朋友可以参考下
    2023-12-12
  • Maven中dependency和plugins的继承与约束

    Maven中dependency和plugins的继承与约束

    这篇文章主要介绍了Maven中dependency和plugins的继承与约束,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12
  • Java中详细解析Map接口

    Java中详细解析Map接口

    这篇文章主要介绍了Java8 中 Map 接口的新方法,本文通过代码实例给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-08-08
  • java插入排序 Insert sort实例

    java插入排序 Insert sort实例

    java插入排序 Insert sort实例代码,需要的朋友可以参考一下
    2013-03-03

最新评论