2012-07-03 36 views
0

我必須在webapp中創建一個進度條。我需要一個執行工作的線程和一個控制器來測試這個線程以獲得他的狀態。
如何使用bean進行設置(在該線程內我需要自動裝載某些服務)?我可以使用線程作爲非單身bean嗎?
謝謝。春豆和線程

+0

那些「進度條」任務的範圍是什麼?這些線程是否與您的會話有關? –

回答

0

我會爲此創建一個小包裝類。你可以讓這個類中的所有setter處理注入的服務,你可以使用InitializingBean來啓動線程,並且可以將bean注入其他類,以便他們可以調用volatile或​​字段中的獲得者。喜歡的東西:

public class ProgressBar implements InitializingBean, Runnable, DisposableBean { 
    private volatile int someField; 
    private Thread thread; 
    // start the thread after the properties are set 
    public void afterPropertiesSet() { 
     thread = new Thread(this); 
     // maybe make it a daemon thread 
     // thread.setDaemon(true); 
     thread.start(); 
    } 
    // stop it when spring is shutting down 
    public void destroy() { 
     thread.interrupt(); 
    } 
    public void run() { 
     ... thread code goes here 
    } 
    // spring setter 
    public void setSomeService(SomeService someService) { 
     this.someService = someService; 
    } 
    // getter used by other beans to get some value from this class 
    public int getSomeField() { 
     return someField; 
    } 
} 

你也可以儘管他們的工作爲運行每隔一段時間重複的任務更好地利用一些春天的定時器類的這門課程的。

+0

但該線程必須是非單身bean?如何用註釋來定義它? – Tobia

+0

所以你想要很多呢?那麼你應該把它變成一個'FactoryBean'。 http://blog.springsource.org/2011/08/09/whats-a-factorybean/ – Gray

+0

以上的實現可能需要一個標準的新ProgressBar();? – Tobia