是否可以在 Spring 中自动装配组件列表?

问题描述 投票:0回答:1

我正在使用 Spring Boot (2.7.16)。

我有许多组件(每个组件都注释为

@Component
),它们实现了
Task
接口。

在我的服务中,我想自动连接任务列表,最好按特定顺序

@Autowired
// Ideally, sequence like
@Qualifier("firstTask"), @Qualifier("secondTask"), @Qualifier("thirdTask")
private List<Task> tasks;

这样我就可以在某个时候运行它们。例如,类似的东西;

tasks.foreach(task -> { 
  task.run();
});

我目前正在单独自动连接它们并显式实例化列表。

@Autowired
@Qualifier("firstTask")
private Task firstTask;


@Autowired
@Qualifier("secondTask")
private Task secondTask;

@Autowired
@Qualifier("thirdTask")
private Task thirdTask;

private List<Task> tasks = List.of(firstTask, secondTask, thirdTask);

但是能够直接自动连接列表就太棒了。

spring spring-boot autowired
1个回答
1
投票

(我写了原来的问题)

您可以

@Autowired
组件列表

@Autowired
private List<Task> tasks;

会起作用的。

但是,如果您想定义顺序,则无法在服务中执行此操作。您需要在每个组件上应用

@Order
注释(在我看来,这似乎是错误的方式,但就是这样做的)。

那么,

@Component
@Order(1)
public class FirstTask implements Task {
  // ...
}

,

@Component
@Order(2)
public class SecondTask implements Task {
  // ...
}

,和

@Component
@Order(3)
public class ThirdTask implements Task {
  // ...
}
© www.soinside.com 2019 - 2024. All rights reserved.