Springboot 依赖项:找到两个依赖项并忽略 Qualifier

Springboot dependency: two dependencies found and Qualifier ignored

这是我的 class:

@Repository
@RequiredArgsConstructor
@Slf4j
public class ServeiTerritorialCatalegsClientRepositoryImpl implements ServeiTerritorialCatalegsClientRepository {

    @Qualifier("catalegsMarshaller") private final Marshaller marshaller;

    //...
}

我的 bean 定义是:

@Bean
public Marshaller oidMarshaller() throws JAXBException {
   //...
}

@Bean
public Marshaller catalegsMarshaller() throws JAXBException {
  //...
}

我收到这条消息:

***************************
APPLICATION FAILED TO START
***************************

Description:

Parameter 3 of constructor in cat.catsalut.hes.mpi.hazelcast.loader.repository.ServeiTerritorialCatalegsClientRepositoryImpl required a single bean, but 2 were found:
    - oidMarshaller: defined by method 'oidMarshaller' in class path resource [cat/catsalut/hes/mpi/hazelcast/loader/configuration/ServeiTerritorialConfiguration.class]
    - catalegsMarshaller: defined by method 'catalegsMarshaller' in class path resource [cat/catsalut/hes/mpi/hazelcast/loader/configuration/ServeiTerritorialConfiguration.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

在 class ServeiTerritorialCatalegsClientRepositoryImpl 中似乎有一个构造函数,其第三个参数是 Marshaller 类型。 因此,在构造函数中定义参数时,对参数类型 Marshaller 使用限定符属性,如下所示:

public ServeiTerritorialCatalegsClientRepositoryImpl(parameter1, paramter2, @Qualifier("catalegsMarshaller") Marshaller marshaller1)

Lombok 不会将注释从字段复制到构造函数参数或 属性 访问器。您现在需要自己提供构造函数。

您需要做两件事:

  1. 更新 lombok.config 并添加 -

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

  2. 使用@Qualifier 并提供合适的唯一名称。例如:

@Repository
@RequiredArgsConstructor
@Slf4j
public class MyImplClass{
  @Qualifier("Myqualifier1") MyBean bean;
 
  Person getPerson()
}

在此处查看 lombok 配置指南 - lombokconfig