SpringBoot中@Autowired与@Resource的区别小结

 更新时间:2025年01月20日 09:05:39   作者:coding侠客  
本文主要介绍了SpringBoot中@Autowired与@Resource的区别小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

最近接手了离职同事负责的业务,在处理一个线上工单的时候,看了下历史逻辑,在阅读他们写的代码时,发现他们竟然把@Autowired和@Resource注解混用。今天就借此机会聊聊SpringBoot项目中这两者之间的区别。

1. 注解来源

  • @Autowired:是Spring框架提供的注解。IOC特性的核心注解之一。
  • @Resource:是Java的标准注解,属于Java EE 规范(JSR-250)。

2. 注入方式

  • @Autowired:默认按类型进行注入。如果业务场景比较复杂,一个接口有多个实现类的话,可以结合@Qualifier注解指定具体的bean。如:
@Service
public class SomeService {
    @Autowired
    @Qualifier("userServiceImpl1")
    private UserService userService1;
    
    @Autowired
    @Qualifier("userServiceImpl2")
    private UserService userService2;
    // 业务逻辑
}
  • @Resource:默认按名称进行注入,即name属性。如果name属性没有指定,则按类型进行注入。
@Service
public class SomeService {
    @Resource
    private UserService userService;
    // 业务逻辑
}

在这种情况下,Spring 会尝试查找名称为 userService 的 bean。如果找不到按名称匹配的 bean,它会再尝试按类型进行匹配。如果按类型匹配也找不到唯一的 bean,就会抛异常。

用一句话总结就是:@Autowired相当于是@Resource的子集

3. 依赖检查

  • @Autowired:默认情况下,它要求依赖的 bean 必须存在于容器中。如果找不到匹配的 bean,Spring 会抛出 NoSuchBeanDefinitionException 异常。可以通过将 required 属性设置为 false 来改变这种行为,使依赖变为可选的,这个时候注入的bean就是null。如:
@Service
public class SomeService {
    @Autowired(required = false)
    private UserService userService;
    // 业务逻辑
}
  • @Resource:没有类似 required 这样明确的属性来控制依赖是否必须存在。当按名称或者类型无法找到匹配的 bean 时,会抛出NameNotFoundException 或 NullPointerException 异常。

4. 使用场景选择

  • @Resource更适合在需要严格按名称注入的场景下使用。
    在 Java EE 环境中更常见,因为它符合 Java EE 标准。
  • @Autowired是 Spring 生态系统中最常用的依赖注入方式。对于 Spring 生态系统的开发者来说,使用频次很高。特别是在处理复杂的依赖关系和需要灵活配置的场景下,通过结合 @Qualifier 注解,可以实现精准的依赖注入。

当然,本人也更喜欢使用@Autowired。

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

相关文章

  • Java 泛型超详细入门讲解

    Java 泛型超详细入门讲解

    这篇文章主要介绍了Java基础泛型详情,泛型是JDK5中引入的特性,它提供了编译时类型安全检测机制,该机制允许在编译时检测到非法的类型,下面文章的详细介绍,需要的朋友可以参考一下
    2022-04-04
  • RestTemplate发送HTTP POST请求使用方法详解

    RestTemplate发送HTTP POST请求使用方法详解

    这篇文章主要为大家介绍了RestTemplate发送HTTP POST请求的使用方法详解,有需要的朋友可以借鉴参考下希望能够有所帮助,祝大家多多进步
    2022-03-03
  • Spring中的spring-retry重试机制解析

    Spring中的spring-retry重试机制解析

    这篇文章主要介绍了Spring中的spring-retry重试机制解析,spring-retry可以通过注解,在不入侵原有业务逻辑代码的方式下,优雅的实现重处理功能,在spring-retry中,所有配置都是基于简单注释的,需要的朋友可以参考下
    2024-01-01
  • Java实现入参数据批量数据校验详解

    Java实现入参数据批量数据校验详解

    在业务处理中一般入参是单条数据,这样数据校验比较容易,但是这种方法对于集合数据的校验不适用,下面我们就来看看如何对入参数据进行批量数据校验吧
    2024-02-02
  • Java服务限流算法的6种实现

    Java服务限流算法的6种实现

    服务限流是指通过控制请求的速率或次数来达到保护服务的目的,本文主要介绍了Java服务限流算法的6种实现,具有一定的参考价值,感兴趣的可以了解一下
    2023-05-05
  • Spring在SingleTon模式下的线程安全详解

    Spring在SingleTon模式下的线程安全详解

    这篇文章主要介绍了Spring在SingleTon模式下的线程安全详解,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01
  • 基于Springboot的高校社团管理系统的设计与实现

    基于Springboot的高校社团管理系统的设计与实现

    本文将基于Springboot+Mybatis开发实现一个高校社团管理系统,系统包含三个角色:管理员、团长、会员。文中采用的技术有Springboot、Mybatis、Jquery、AjAX、JSP等,感兴趣的可以了解一下
    2022-07-07
  • SpringBoot @ConfigurationProperties使用详解

    SpringBoot @ConfigurationProperties使用详解

    这篇文章主要介绍了SpringBoot @ConfigurationProperties使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-02-02
  • 一文了解SpringBoot是如何连接数据库的

    一文了解SpringBoot是如何连接数据库的

    Spring Boot提供了一系列的开箱即用的功能和特性,使得开发人员可以快速构建和部署应用程序,下面这篇文章主要给大家介绍了关于SpringBoot是如何连接数据库的相关资料,需要的朋友可以参考下
    2023-06-06
  • Java实现简单的抽牌游戏

    Java实现简单的抽牌游戏

    这篇文章主要为大家详细介绍了Java实现简单的抽牌游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-04-04

最新评论