美文网首页
spring使用lombok注解构造器注入时使用@Qualifi

spring使用lombok注解构造器注入时使用@Qualifi

作者: 南瓜pump | 来源:发表于2023-11-21 17:59 被阅读0次
  1. 使用spring注入bean常用@Autowired注解,当遇到接口有多实现常用@Qualifier注解来区分;


    接口多实现

    ContractorInjectServiceImpl.java

@Service("contractorInjectService1")
public class ContractorInjectServiceImpl implements ContractorInjectService {
    @Override
    public void go(String msg) {
        System.out.println("contractorInjectService1" + msg);
    }
}

ContractorInjectServiceImpl2.java

@Service("contractorInjectService2")
public class ContractorInjectServiceImpl2 implements ContractorInjectService {
    @Override
    public void go(String msg) {
        System.out.println("contractorInjectService2" + msg);
    }
}

Test2.java

@Component
public class Test2 {

    @Autowired
    @Qualifier("contractorInjectService2")
    private ContractorInjectService contractorInjectService;

    @PostConstruct
    void ts () {
        contractorInjectService.go( "====  " + Calendar.getInstance().getTime().toString());
    }

}
  1. 也可以使用lombok的注解来实现构造器注入:
    Test.java
@Component
@RequiredArgsConstructor
public class Test {

    @Qualifier("contractorInjectService2")
    private final ContractorInjectService contractorInjectService;

    @PostConstruct
    void ts () {
        contractorInjectService.go( "====  " + Calendar.getInstance().getTime().toString());
    }

}
  • 但是启动时发现报错:
Description:

Parameter 0 of constructor in com.pump.demopro.contractorinject.test.Test required a single bean, but 2 were found:
    - contractorInjectService1: defined in file [D:\GiteeRepository\my-learn\demo-pro\target\classes\com\pump\demopro\contractorinject\service\impl\ContractorInjectServiceImpl.class]
    - contractorInjectService2: defined in file [D:\GiteeRepository\my-learn\demo-pro\target\classes\com\pump\demopro\contractorinject\service\impl\ContractorInjectServiceImpl2.class]


Action:

Consider marking one of the beans as @Primary, updating the consumer to accept multiple beans, or using @Qualifier to identify the bean that should be consumed


Process finished with exit code 1

  • 这是因为Lombok does not copy the annotation 'org.springframework beans.factory.annotation.Qualifier’into the constructor,Lombok没有复制@Qualifier注解到构造器中,所以会失效。
  • 解决办法:
    在项目根目录下创建一个lombok.config文件(跟src和target同级目录下)
lombok.copyableAnnotations += org.springframework.beans.factory.annotation.Qualifier

然后执行 mvn clean,再重新启动即可。

相关文章

网友评论

      本文标题:spring使用lombok注解构造器注入时使用@Qualifi

      本文链接:https://www.haomeiwen.com/subject/szzbwdtx.html