@Autowired、@Resource、@Qualifier的区别

背景:@Autowired、@Resource均能实现bean注入,但是两者的注入方式是不一样的。

1、@Resource - J2EE提供
默认以名称方式注入。
有两个属性是比较重要的:
name: Spring 将 name 的属性值解析为 bean 的名称, 使用 byName 的自动注入策略;
type: Spring 将 type的属性值解析为 bean 的类型,使用 byType 的自动注入策略;
如果既不指定 name 属性又不指定 type 属性,Spring这时通过反射机制使用 byName 自动注入策略。
@Resource 的装配顺序:
如果同时指定了 name 属性和 type 属性,那么 Spring 将从容器中找唯一匹配的 bean 进行装配,找不到则抛出异常;
如果指定了 name 属性值,则从容器中查找名称匹配的 bean 进行装配,找不到则抛出异常;
如果指定了 type 属性值,则从容器中查找类型匹配的唯一的 bean 进行装配,找不到或者找到多个都会抛出异常;
如果都不指定,则会自动按照 byName 方式进行装配, 如果没有匹配,则回退一个原始类型进行匹配,如果匹配则自动装配;

2、@Autowired - Spring
默认以类型方式注入。默认情况下,它要求依赖对象必须存在,如果允许 null 值,可以设置它 required 为false。
若要以名称方式注入,则再加上@Qualifier(“name”) - (如果有多个类型一样的Bean候选者,则需要限定其中一个候选者,否则将抛出异常)。

demo code:

    @Bean(name = "threadPoolTaskExecutor")
    public Executor threadPoolTaskExecutor() {
        return new ThreadPoolExecutor(10, 100,
                120L, TimeUnit.SECONDS, new ArrayBlockingQueue<>(1000));
    }

    @Bean(name = "taskExecutor")
    public Executor taskExecutor() {
        return new ThreadPoolTaskExecutor();
    }
    @Autowired
    @Qualifier("threadPoolTaskExecutor")
    private Executor executor;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值