在物联网项目添加新的厂家时,一开始提示存在多个相同的 service 实现,无法注入。在添加了修饰词 Qualifier("hdMsgRecvService") 之后,不再报错,但提醒 lombok 不会将注解 'org.springframework.beans.factory.annotation.Qualifier' 复制到构造函数中

百度了解到,原来是 @RequiredArgsConstructor 注解与 Qualifier("hdMsgRecvService") 功能冲突了。当然这只是一个警告,并不影响程序运行。

@RequiredArgsConstructor 会根据 private final Class class 这样的不可变的参数,生成构造函数,通过构造函数注入这些服务。

Qualifier("hdMsgRecvService") 是在服务使用统一接口时,标记实例化的是那个类,与 @Service("hdMsgRecvService") 配合使用。

# 实现类
@Service("hdMsgRecvService")

# 注入服务
{
    @Autowired
    @Qualifier("hdMsgRecvService")
    private DeviceMsgRecvService deviceService;

既然已经使用了 @RequiredArgsConstructor 构造函数注入方式,且与这个修饰词注解冲突,直接去掉肯定会报错,可以将实现类直接作为参数类型,这样实现类明确了,也就不需要修饰词标注了。

@RequiredArgsConstructor
public class xxController
{
    private final HDDeviceMsgSendServiceImpl hdSendService;

另外还可以添加 lombok 配置来解决:使用@RequiredArgsConstructor注入时@Qualifier失效问题,这也是一种解决方法。