2012-03-27 64 views
0

我對ScheduledExecutorService的實現有問題。在我的任務的run()方法中,我不能注入bean。ScheduledExecutorService + beans

public class MyTask implements Runnable{ 

    @Autowired 
    private DataExporter de; 

    @Override 
    public void run(){ 

     de.export(); 
    } 

} 

運行我的任務對象de爲空。我知道春天有一些任務和計劃的實施,但有什麼辦法可以解決這個問題嗎?

+0

你是如何創建你的MyTask實例的? – beny23 2012-03-27 08:54:36

+0

是的,我正在用默認的構造函數創建MyTask的實例。我放入run()的任何東西都可以工作。問題在於這種注射。 – bemol 2012-03-27 09:02:00

回答

0

如果我理解正確你創建你的MyTask比如像這樣

MyTask myTask = new MyTask(); 

的問題,這是春天已經不知道的MyTask另一個實例已創建。我建議在應用上下文中創建一個原型bean:

<bean id="myTaskTemplate" class="mypackage.MyTask" scope="prototype" /> 

然後使用lookup method injection

以下的抽象方法添加到當前創建MyTask實例可以

protected abstract createMyTask(); 

及以下添加到您的bean定義

<bean id="myTaskCreatingBean" class="..."> 
    <lookup-method name="createMyTask" bean="myTaskTemplate"/> 
</bean> 

那麼這個bean可以代替

MyTask myTask = new MyTask(); 

MyTask myTask = createMyTask(); 

myTask bean將在春天創建並且依賴關係正確自動裝配。

+0

那麼這個伎倆:)所有的問題都不知道我的春天已經夠好了。非常感謝你的隊友。 – bemol 2012-03-27 11:26:45