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