0

我必须在 webapp 中创建一个进度条。我需要一个执行工作的线程和一个测试该线程以获得他的状态的控制器。
如何使用 bean 设置它(在那个线程中我需要自动装配一些服务)?我可以将线程用作非单例 bean 吗?
谢谢你。

4

1 回答 1

0

我会为此创建一个小型包装类。您可以让类中的所有 setter 来处理注入的服务,您可以使用它InitializingBean来启动线程,并且可以将 bean 注入到其他类中,以便它们可以调用 gettervolatilesynchronized字段。就像是:

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 回答