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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • java中File类的构造函数及其方法

    java中File类的构造函数及其方法

    这篇文章主要介绍了java中File类的构造函数及其方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-06-06
  • MyBatis-plus+达梦数据库实现自动生成代码的示例

    MyBatis-plus+达梦数据库实现自动生成代码的示例

    这篇文章主要介绍了MyBatis-plus+达梦数据库实现自动生成代码的示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • Spring中@Transactional注解关键属性和用法小结

    Spring中@Transactional注解关键属性和用法小结

    在Spring框架中,@Transactional 是一个注解,用于声明事务性的方法,它提供了一种声明式的事务管理方式,避免了在代码中直接编写事务管理相关的代码,本文给大家介绍@Transactional 注解的一些关键属性和用法,感兴趣的朋友一起看看吧
    2023-12-12
  • SpringBoot中的静态资源访问的实现

    SpringBoot中的静态资源访问的实现

    这篇文章主要介绍了SpringBoot中的静态资源访问的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • SpringBoot整合Druid数据源的方法实现

    SpringBoot整合Druid数据源的方法实现

    Druid是阿里开发的一款开源的数据源,被很多人认为是Java语言中最好的数据库连接池,本文主要介绍了SpringBoot整合Druid数据源的方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • SpringCloud分布式链路追踪组件Sleuth配置详解

    SpringCloud分布式链路追踪组件Sleuth配置详解

    这篇文章主要介绍了SpringCloud链路追踪组件Sleuth配置方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2022-11-11
  • Java实战之实现OA办公管理系统

    Java实战之实现OA办公管理系统

    这篇文章主要介绍了如何通过Java实现OA办公管理系统,文章采用到了JSP、JQuery、Ajax等技术,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下
    2022-02-02
  • 利用Java实现mTLS调用

    利用Java实现mTLS调用

    这篇文章主要介绍使用 Java作为客户端 与受 mTLS 保护的服务交互。为了对我们的 Java 客户端进行 ssl 配置,我们需要先设置一个 SSLContext。这简化了事情,因为 SSLContext 可用于各种 http 客户端,接下来我们一起进入下面文章了解具体内容,需要的朋友可以参考一下
    2021-11-11
  • Spring中AOP注解@Aspect的使用详解

    Spring中AOP注解@Aspect的使用详解

    这篇文章主要介绍了Spring中AOP注解@Aspect的使用详解,AOP是种面向切面的编程思想,面向切面编程是将程序抽象成各个切面,将那些影响了多个类的公共行为抽取到一个可重用模块里,减少系统的重复代码,降低模块间的耦合度,增强代码的可操作性和可维护性,需要的朋友可以参考下
    2024-01-01
  • SpringBoot+Redis实现后端接口防重复提交校验的示例

    SpringBoot+Redis实现后端接口防重复提交校验的示例

    本文将结合实例代码,介绍SpringBoot+Redis实现后端接口防重复提交校验的示例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-06-06

最新评论