1

我是弹簧用户。我开始阅读spring的源代码。

当我阅读 AbstractApplicationContext 时,我发现有一个方法 start(),我发现初始化 ApplicationContext 时没有调用该方法。

我的问题:1)该方法的用途是什么?根据这个词的(开始)含义,我认为应该在 ApplicationContext 可以工作之前调用它。但事实并非如此。

2)如何监听 applicationContext 开始工作的事件?看了代码,发现方法会发布ContextStartedEvent。但是如果我只是初始化上下文,上下文仍然可以工作并且不发布事件。我无法监听事件来跟踪应用程序上下文的开始。

4

1 回答 1

2

start方法是Lifecycle接口的一部分,在应用程序启动过程中被调用。

如果您想在上下文启动时收到通知,您应该声明一个实现 Lifecycle 接口的 bean。

public class org.example.MyLifecycle implements Lifecycle {
    private boolean started = false;
    public boolean isRunning() {
        return started;
    }
    public void start() {
        System.err.println("MyLifecycle starting");
        started = true;
    }
    public void stop() {
        System.err.println("MyLifecycle stopping");
        started = false;
    }
}

然后

<bean class="org.example.MyLifecycle"/>

默认情况下,这一切都由DefaultLifecycleProcessor处理,除非上下文中有一个lifecycleProcessor实现LifecycleProcessor接口的 bean

于 2012-10-09T14:57:24.673 回答