使用@RequiredArgsConstructor注入时@Qualifier失效问题

在一个项目中,使用到了 Lombok 的@RequiredArgsConstructor注解来注入对象

@Service
@RequiredArgsConstructor
public class DeliveryServiceImpl implements DeliveryService {
    private final ResourceDao resourceDao;
}

注意:@RequiredArgsConstructorLombok 库提供的一个注解,用于自动生成一个构造器,这个构造器会为所有用final修饰 或 @NonNull 注解的字段提供参数支持,也就是属性注入。
如果字段没有用final修饰 或 @NonNull 注解,可能会发生注入失败报错的情况,所以如果是不会变动的字段,最好用final关键字修饰,可能变动的字段用@NonNull 注解。

因为ResourceDao接口有两个实现类

@Repository("XxxResourceDao")
public class XxxResourceDao implements ResourceDao {...}
@Repository("YyyResourceDao")
public class YyyResourceDaoimplements ResourceDao {...}

分别用XxxResourceDaoYyyResourceDao来命名

本想配合@Qualifier注解来做注入时区分

@Service
@RequiredArgsConstructor
public class DeliveryServiceImpl implements DeliveryService {
	@Qualifier("XxxResourceDao")
    private final ResourceDao resourceDao;
}

但是发现报错:

Description:
Parameter 0 of constructor in com.hkt.it.ds.ruby.dmg.dmgfulfillmentapigz.service.impl.DeliveryServiceImpl required a single bean, but 2 were found:
- DeliveryResourceDao: defined in file [D:\workspace\dmg-fulfillment-api-gz\target\classes\com\hkt\it\ds\ruby\dmg\dmgfulfillmentapigz\dao\impl\DeliveryResourceDao.class]
- FulfillmentResourceDao: defined in file [D:\workspace\dmg-fulfillment-api-gz\target\classes\com\hkt\it\ds\ruby\dmg\dmgfulfillmentapigz\dao\impl\FulfillmentResourceDao.class]

说找到了两个Bean,不知道注入哪一个
这种情况说明@Qualifier注解失效了

其实在IDEA中也有提示:
在这里插入图片描述

Lombok does not copy the annotation 'org.springframework beans.factory.annotation.Qualifier’into the constructor
Lombok没有复制@Qualifier注解到构造器中,所以会失效

解决办法:
在项目根目录下创建一个lombok.config文件
在这里插入图片描述
然后在里面添加一项配置:把@Qualifier添加进允许复制的注解列表中

lombok.copyableAnnotations += org.springframework.beans.factory.annotation.Qualifier

然后删除target文件或者mvn clean一下,重新构建一下项目即可。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值