AbstractApplicationContext中方法start()的用法是什么

时间:2012-10-09 14:26:54

标签: spring

我是春季用户。我开始阅读spring的源代码。

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

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

2)如何监听applicationContext开始工作的事件?在阅读完代码后,我发现该方法将发布ContextStartedEvent。但是,如果我只是初始化上下文,上下文仍然可以工作,不发布event.I无法监听事件以跟踪applicationcontext的开始。

1 个答案:

答案 0 :(得分: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"/>

除非在名为lifecycleProcessor的上下文中有一个实现DefaultLifecycleProcessor接口的bean

,否则默认情况下会由LifecycleProcessor处理。