您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

SpringBoot自动装配通用类型失败,因为可能有多个bean

SpringBoot自动装配通用类型失败,因为可能有多个bean

如果要自动连线所有扩展的bean,TaskService也许应该将自动连线字段更改为List

@Component    
public class TaskScheduler<T extends TaskService>{
    @Autowired
    private List<T> taskService;
}

这样,Spring应该放入List所有可扩展的自动装配bean TaskService

:由于您想从动力学上选择TaskService我发现的唯一方法的类型,因此,如下所示。首先,重新定义您的TaskScheduler

public class TaskScheduler <T extends TaskService>{

    private T taskService;

    public void setTaskService(T taskService) {
        this.taskService = taskService;
    }
}

您的TaskService子类和相关子类应保持不变。按如下所示设置配置类:

@Configuration
public class TaskConf {

    @Autowired
    private FirstTaskService firstTaskService;

    @Autowired
    private SecondTaskService secondTaskService;

    @Bean
    public TaskScheduler<FirstTaskService> firstTaskServiceTaskScheduler(){
        TaskScheduler<FirstTaskService> t =  new TaskScheduler<>();
        t.setTaskService(firstTaskService);
        return t;
    }

    @Bean
    public TaskScheduler<SecondTaskService> secondTaskServiceTaskScheduler(){
        TaskScheduler<SecondTaskService> t =  new TaskScheduler<>();
        t.setTaskService(secondTaskService);
        return t;
    }

}

然后TaskScheduler以这种方式测试您的:

@Autowired
TaskScheduler<firstTaskService> ts;
Java 2022/1/1 18:24:18 有598人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶