JAVA --- @Autowired和@Resource区别

78 篇文章 0 订阅

在Spring框架中,@Resource@Autowired都是用于依赖注入的注解,但它们有一些关键的区别,主要体现在来源、默认行为和配置方式上。

1. 来源

  • @Autowired

    • 来源:Spring框架。
    • @Autowired是Spring框架提供的注解,专门用于Spring的依赖注入。
  • @Resource

    • 来源:Java标准(JSR-250)。
    • @Resource是Java标准的一部分,定义在javax.annotation包中,不依赖于特定的框架。

2. 默认行为

  • @Autowired

    • 默认按类型(byType)注入。
    • 如果找到多个匹配的Bean,会抛出异常,除非使用@Qualifier指定具体的Bean名称。
    • 可以用于字段、构造函数和Setter方法。
  • @Resource

    • 默认按名称(byName)注入。
    • 如果按名称找不到匹配的Bean,会按类型(byType)注入。
    • 可以用于字段和Setter方法。

3. 配置方式

  • @Autowired

    • 使用@Qualifier注解可以显式指定Bean的名称。

    • 示例:

      @Autowired
      @Qualifier("specificBeanName")
      private MyService myService;
      
  • @Resource

    • 可以直接在注解中指定Bean的名称。

    • 示例:

      @Resource(name = "specificBeanName")
      private MyService myService;
      

4. 适用场景

  • @Autowired

    • 适用于Spring项目,特别是需要按类型注入的场景。
    • 适用于需要显式指定Bean名称的场景,使用@Qualifier注解。
  • @Resource

    • 适用于需要跨框架兼容的场景,因为它是Java标准的一部分。
    • 适用于按名称注入的场景,特别是在Bean名称明确且固定的场景。

示例代码

使用@Autowired
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;

@Component
public class MyComponent {
    @Autowired
    @Qualifier("specificBeanName")
    private MyService myService;

    // 业务方法
}
使用@Resource
import javax.annotation.Resource;
import org.springframework.stereotype.Component;

@Component
public class MyComponent {
    @Resource(name = "specificBeanName")
    private MyService myService;

    // 业务方法
}

总结

  • @Autowired是Spring框架提供的注解,默认按类型注入,适用于Spring项目。
  • @Resource是Java标准的一部分,默认按名称注入,适用于需要跨框架兼容的场景。
  • 选择使用哪个注解取决于项目需求、框架依赖和注入方式。

通过理解这两个注解的区别,可以根据具体需求选择合适的注解,实现灵活且高效的依赖注入。

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

需要重新演唱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值