Если вы хотите автоматически связать все bean-компоненты, которые расширяются TaskService
, возможно, вам следует изменить поле автонастройки на List
:
@Component
public class TaskScheduler<T extends TaskService>{
@Autowired
private List<T> taskService;
}
Таким образом, Spring должен добавить в List
все автонастраиваемыеbean-компоненты, которые расширяются TaskService
.
EDIT : поскольку вы хотите динамически выбирать тип 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;