Java Spring依赖项注入对象池
我们有一个对象,它在spring引导容器中进行一些计算。我们称之为“床单”。当应用程序启动时,我们需要实例化(比如说10张)表单。每次开始计算时,我们都需要通过DI访问该工作表的一个实例,并在额外的线程中运行Java Spring依赖项注入对象池,java,spring,dependency-injection,Java,Spring,Dependency Injection,我们有一个对象,它在spring引导容器中进行一些计算。我们称之为“床单”。当应用程序启动时,我们需要实例化(比如说10张)表单。每次开始计算时,我们都需要通过DI访问该工作表的一个实例,并在额外的线程中运行 你知道在春天这是否可行吗?你可以通过以下方式实现。。假设您有一个Sheet类,如下所示。我使用了java8来编译代码 Sheet.java @Component("sheet") @Scope(value = "prototype") public class Sheet
你知道在春天这是否可行吗?你可以通过以下方式实现。。假设您有一个
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);
}
}
@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实例创建。。要访问工作表
对象,请使用以下代码
@Autowired
SheetPool sheetPool;
Sheet sheetObj = sheetPool.getObject();
你不能用一些普通的游泳池吗?Like?Create custom spring bean这个答案是正确的,但是请注意,如果您使
SheetPool
实现,那么您可以直接注入Sheet
,它将从工厂bean(即池)中检索。