一文弄懂Spring源码之@Resource注解

本文详细介绍了Spring框架中的@Resource注解,包括其按名称和类型进行注入的原理。当有多个相同类型的Bean时,不指定类型会导致NoUniqueBeanDefinitionException。接着,文章解析了注入的源码,涉及AbstractAutowireCapableBeanFactory和CommonAnnotationBeanPostProcessor,通过反射和getBean方法完成属性赋值。
摘要由CSDN通过智能技术生成

一.@Resource注解简单介绍

@Resource注解标注的属性默认按照ByName进行注入,由J2EE提供

如果我们想按照ByType注入,代码要这样写:

public class LaController {
    //按类型注入
    @Resource(type=LaService.class)
    private LaService  laService;
}
复制代码

如果LaService接口存在两个实现类,且两个实现类都会被spring扫描到,在注入的时候就会报错:nested exception is
org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type 'com.netty.use.nettyuse.service.LaService' available: expected single matching bean but found 2: la2ServiceImpl,laServiceImpl

type也可以是实现类class,例如:

public class LaController {
    //按类型注入
    @Resource(type=La2ServiceImpl.class)
    private LaService  laService;
}
复制代码

这样就会注入La2ServiceImpl实例,就不会出现上面的报错了。

二.注入源码详解

代码定位到
AbstractAutowireCapableBeanFactory类的populateBean方法

//是否有实例化相关的BeanPostProcessor
b
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值