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

@Autowired和@Resource都是Spring框架中的依赖注入方式,但有区别。@Autowired按类型装配,默认抛出异常处理多个相同类型Bean,而@Resource按名称装配,名称不存在时才按类型装配。在存在多个同类型Bean时,推荐使用@Resource指定名称注入。
摘要由CSDN通过智能技术生成


一、@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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值