@Autowired和@Resource的区别是什么?

@Autowired和@Resource在Spring框架中用于依赖注入,@Autowired默认按类型装配,可配合@Qualifier指定名称,@Resource默认按名称装配。@Autowired可用于构造器、方法、参数、成员变量和注解,而@Resource用于类、成员变量和方法。两者在不同场景下有各自的适用性,且@Autowired是Spring特有的,而@Resource遵循JSR-250标准。
摘要由CSDN通过智能技术生成

参考:苏三

我们先来看一下@Autowired的作用范围
①构造器 ②方法 ③参数
④成员变量 ⑤注解

1. @Autowired的默认装配

默认情况下spring是按照类型装配的,也就是我们所说的byType方式。此外,@Autowired注解的required参数默认是true,表示开启自动装配,有些时候我们不想使用自动装配功能,可以将该参数设置成false。

2.相同类型的对象不只一个时

byType方式主要针对相同类型的对象只有一个的情况,此时对象类型是唯一的,可以找到正确的对象。但如果相同类型的对象不只一个时,会发生什么?

产生两个相同的类型bean:

public class TestService1 {
   

    public void test1() {
   
    }
}

@Service
public class TestService2 {
   

    @Autowired
    private TestService1 testService1;

    public void test2() {
   
    }
}

@Configuration
public class TestConfig {
   

    @Bean("test1")
    public TestService1 test1() {
   
        return new TestService1();
    }

    @Bean("test2")
    public TestService1 test2() {
   
        return new TestService1();
    }
}

报错了,提示testService1是单例的,却找到两个对象。
在这里插入图片描述

其实还有一个情况会产生两个相同的类型bean:

public interface IUser {
   
    void say();
}

@Service
public class User1 implements IUser{
   
    @Override
    public void say() {
   
    }
}

@Service
public class User2 implements IUser{
   
    @Override
    public void say() {
   
    }
}

@Service
public class UserService {
   

    @Autowired
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值