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 不会将注释从字段复制到构造函数参数或 属性 访问器。您现在需要自己提供构造函数。
您需要做两件事:
更新 lombok.config 并添加 -
lombok.copyableAnnotations += org.springframework.beans.factory.annotation.Qualifier
使用@Qualifier 并提供合适的唯一名称。例如:
@Repository
@RequiredArgsConstructor
@Slf4j
public class MyImplClass{
@Qualifier("Myqualifier1") MyBean bean;
Person getPerson()
}
在此处查看 lombok 配置指南 - lombokconfig
这是我的 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 不会将注释从字段复制到构造函数参数或 属性 访问器。您现在需要自己提供构造函数。
您需要做两件事:
更新 lombok.config 并添加 -
lombok.copyableAnnotations += org.springframework.beans.factory.annotation.Qualifier
使用@Qualifier 并提供合适的唯一名称。例如:
@Repository @RequiredArgsConstructor @Slf4j public class MyImplClass{ @Qualifier("Myqualifier1") MyBean bean; Person getPerson() }
在此处查看 lombok 配置指南 - lombokconfig