0

Webアプリでプログレスバーを作成する必要があります。作業を行うスレッドと、このスレッドをテストしてステータスを取得するコントローラーが必要です。
Beanを使用して設定するには(そのスレッド内でいくつかのサービスを自動配線する必要があります)?スレッドを非シングルトンBeanとして使用できますか?
ありがとうございました。

4

1 に答える 1

0

このために小さなラッピングクラスを作成します。注入されたサービスを処理するためにクラス内のすべてのセッターを配置しInitializingBean、スレッドを開始するために使用できます。また、他のクラスにBeanを注入して、volatileまたはsynchronizedフィールドでゲッターを呼び出すことができます。何かのようなもの:

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;
    }
}

もちろん、これにはSpringのタイマークラスのいくつかを使用することもできますが、頻繁に実行される反復的なタスクには適しています。

于 2012-07-03T15:40:31.400 に答える