1 回答
TA贡献1963条经验 获得超6个赞
如果您想自动装配所有扩展的 bean,TaskService也许您应该将 autowired 字段更改为List:
@Component
public class TaskScheduler<T extends TaskService>{
@Autowired
private List<T> taskService;
}
这样,Spring 应该放入List所有可自动装配的 beans 扩展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;
添加回答
举报