Consider marking one of the beans as @Primary, updating the consumer to accept multiple beans, or us

一、问题

Description:

Field userService in com.yh.controller.UserController required a single bean, but 2 were found:
    - serviceUserServiceImpl: defined in file [C:\Users\wxt\Desktop\dubbo\consumer-service1\target\classes\com\yh\service\ServiceUserServiceImpl.class]
    - userServiceImpl: defined in file [C:\Users\wxt\Desktop\dubbo\provider-service\target\classes\com\yh\service\impl\UserServiceImpl.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

2023-10-02 21:36:32.969  INFO 54384 --- [bboShutdownHook] o.apache.dubbo.config.DubboShutdownHook  :  [DUBBO] Run shutdown hook now., dubbo version: 2.7.3, current host: 192.168.43.212
2023-10-02 21:36:32.970  INFO 54384 --- [bboShutdownHook] o.a.d.r.support.AbstractRegistryFactory  :  [DUBBO] Close all registries [], dubbo version: 2.7.3, current host: 192.168.43.212

Process finished with exit code 1
 

二、分析

因为sringboot通过@Autowired注入接口的实现类时发现有多个,也就是有多个类继承了这个接口,spring容器不知道使用哪一个。

三、解决

1 我自己出现该问题的场景描述:

我在实现dubbo远程调用时出出现的错误;

接口1继承了接口2,然后又在接口1的实现类中使用@Reference将接口2注入。

2 我的解决办法:

接口1不去继承接口2;

在接口1中直接定义方法,在接口1的实现类中使用@Reference将接口2注入。即:

public interface ServiceUserService{
    List<User> findList();
    String msg();
}
@Service
public class ServiceUserServiceImpl implements ServiceUserService {
    @Reference
    private UserService userService;

    public List<User> findList() {
        return userService.findList();
    }

    public String msg() {
        return "消费者1业务层处理业务:consumer-service1"+userService.msg();
    }
}

另外,我还看到了其他博主的解决方法

第一种、加@Primary表示某个实现类首选注入

@Configuration("")

public class ActivitiConfig {

   @Autowired

   ProcessEngineConfiguration processEngineConfiguration;

   //流程配置,与spring整合采用SpringProcessEngineConfiguration这个实现

   @Bean

   @Primary

   public ProcessEngineConfiguration processEngineConfiguration(DataSource dataSource,

                                                                PlatformTransactionManager transactionManager){

       return processEngineConfiguration;

   }

}

第二种、@Autowired和@Qualifier(value = "beanName")结合使用

@Configuration

public class ActivitiConfig {

   @Autowired

   @Qualifier(value = "processEngineConfigurationImpl")

   ProcessEngineConfiguration processEngineConfiguration;

}

@Service("processEngineConfigurationImpl")

public class ProcessEngineConfigurationImpl extends  ProcessEngineConfiguration{

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小天博客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值