我们有一个Object在spring引导容器中进行一些计算。让我们称之为“工作表”。我们需要在应用程序启动时实例化 - 比方说10张。每次我们开始计算时,我们都需要通过DI访问该表的一个实例,以便在额外的线程中运行。
有任何想法是否可以在Spring中使用?
答案 0 :(得分:1)
您可以通过以下方式实现此目的。假设您有一个Sheet
类,如下所示。我使用 java8 来编译代码。
Sheet.java
@Component("sheet")
@Scope(value = "prototype")
public class Sheet {
// Implementation goes here
}
现在您需要第二个班级SheetPool
,其中包含10个Sheet
<强> SheetPool.java 强>
public class SheetPool {
private List<Sheet> sheets;
public List<Sheet> getSheets() {
return sheets;
}
public Sheet getObject() {
int index = ThreadLocalRandom.current().nextInt(sheets.size());
return sheets.get(index);
}
}
请注意SheetPool
不是Spring组件。它只是一个简单的java类。
现在你需要一个第三个类,它是一个配置类,它将负责用SpringPool
的10个实例创建Sheet
个对象
<强> ApplicationConfig.java 强>
@Configuration
public class ApplicationConfig {
@Autowired
ApplicationContext applicationContext;
@Bean
public SheetPool sheetPool() {
SheetPool pool = new SheetPool();
IntStream.range(0, 10).forEach(e -> {
pool.getSheets().add((Sheet) applicationContext.getBean("sheet"));
});
return pool;
}
}
现在,当应用程序启动SheetPool
时,将使用10个不同的Sheet实例创建对象。要访问Sheet
对象,请使用以下代码。
@Autowired
SheetPool sheetPool;
Sheet sheetObj = sheetPool.getObject();