我很难理解如何使用Taskexecutor连接所有部件。 我有一个创建的任务,BidProposalTask。 (实现Runnable的类) 任务构造器有一个参数,需要自动装配以进行数据库访问等。
我想出了执行者类的代码:
public class ExecuteBidProposalTask {
private TaskExecutor taskExecutor;
private BidProposalTask bidProposalTask;
public ExecuteBidProposalTask(TaskExecutor taskExecutor,
BidProposalTask bidProposalTask) {
super();
this.taskExecutor = taskExecutor;
this.bidProposalTask = bidProposalTask;
}
public void start() {
taskExecutor.execute(bidProposalTask);
}
}
以及以下XML上下文配置:
<bean id="taskExecutor"
class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
<property name="corePoolSize" value="5" />
<property name="maxPoolSize" value="10" />
<property name="queueCapacity" value="25" />
</bean>
正如我在Spring的文档中看到的那样,我创建了一个TaskExecutor bean,但问题是还需要注入BidProposalTask。它不是单例,我需要在项目中反复创建它,并为构造函数添加不同的参数。
基本上问题是如何自动装配非单例bean,所以它的自动装配也会有用吗?
解释起来相当复杂,所以我希望你理解我的问题......
答案 0 :(得分:4)
您可以创建ExecuteBidProposalTask
类ApplicationContextAware(主要是将应用程序上下文注入bean)。然后,您可以在上下文文件中声明BidProposalTask bean并生成scope="prototype"
。然后在start
中的ExecuteBidProposalTask
方法中,您可以执行:context.getBean("bidProposalTask");
并将其传递给执行者。由于您将范围声明为原型,因此在您请求bean时将构造并返回一个新实例(不是单例)。