ScheduledExecutorService + beans

时间:2012-03-27 08:37:58

标签: java spring

我的ScheduledExecutorService实现有问题。在我的任务的run()方法中,我不能注入bean。

public class MyTask implements Runnable{

    @Autowired
    private DataExporter de;

    @Override
    public void run(){

        de.export();
    }

}

运行我的任务对象de时为空。我知道春天有一些任务和时间表实施,但有没有办法解决这个问题?

1 个答案:

答案 0 :(得分:0)

如果我理解正确,您正在创建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();

并且myTask bean将由spring创建并且依赖项已正确自动装配。