我在实现ScheduledExecutorService时遇到了问题。在我的任务的run()方法中,我无法注入bean。
public class MyTask implements Runnable{
@Autowired
private DataExporter de;
@Override
public void run(){
de.export();
}
}运行任务时,我的任务对象de为空。我知道spring有一些任务和时间表的实现,但是有什么方法可以解决这个问题吗?
发布于 2012-03-27 17:16:21
如果我理解正确的话,您正在创建MyTask实例,如下所示
MyTask myTask = new MyTask();这样做的问题是,Spring不知道已经创建了MyTask的另一个实例。我建议在应用程序上下文中创建一个原型bean:
<bean id="myTaskTemplate" class="mypackage.MyTask" scope="prototype" />然后使用lookup method injection。
将以下抽象方法添加到当前正在创建MyTask实例的bean中
protected abstract createMyTask();并将以下内容添加到您的bean定义中
<bean id="myTaskCreatingBean" class="...">
<lookup-method name="createMyTask" bean="myTaskTemplate"/>
</bean>然后你就可以替换
MyTask myTask = new MyTask();使用
MyTask myTask = createMyTask();spring将创建myTask bean,并正确地自动连接依赖项。
https://stackoverflow.com/questions/9885976
复制相似问题