如果要自动连线所有扩展的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;