Не могу сказать чтобы получить работающую реализацию жизненного цикла Spring

Мне нужно, чтобы что-то произошло сразу после загрузки контекста приложения Spring. Насколько я понимаю, мне нужно создать реализацию Lifecycle и поместить ссылку на bean-компонент в контекст. Итак, в моем контексте у меня есть что-то вроде этого:

<bean id="mySpringLifecycle" class="com.my.project.MySpringLifecycle" />

Класс выглядит примерно так:

public class MySpringLifecycle implements Lifecycle {

    @Override
    public void start() {
        System.out.println("The lifecycle has started.");
    }

    @Override
    public void stop() {
        return;
    }

    @Override
    public boolean isRunning() {
        return true;
    }
}

Я не получаю ошибок, но MySpringLifecycle никогда не выводит «Жизненный цикл начался.», И мое приложение запускается нормально.

РЕДАКТИРОВАТЬ:

Это фиксированный код:

public class MySpringLifecycle implements SmartLifecycle {

    private volatile boolean isRunning = false;

    @Override
    public boolean isAutoStartup() {
        return true;
    }

    @Override
    public void stop(Runnable r) {
        System.out.println("STOPPED RUNNABLE!!!");
        isRunning = false;
    }

    @Override
    public void start() {
        System.out.println("STARTED!!!");
        isRunning = true;
    }

    @Override
    public void stop() {
        System.out.println("STOPPED!!!");
        isRunning = false;
    }

    @Override
    public boolean isRunning() {
        return isRunning;
    }

    @Override
    public int getPhase() {
        return 1;
    }
}

В качестве примечания я также хотел бы упомянуть альтернативное решение, которое я тоже могу использовать. В моем web.xml есть следующее:

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/spring.xml</param-value>
</context-param>

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

ContextLoaderListener имеет метод, называемый contextInitialized. Я создал свою собственную реализацию и добавил ее в web.xml. В своей реализации я расширил ContextLoaderListener,предоставил переопределение для метода contextInitialized, сначала вызвал super для этого метода, а затем выполнил мои собственные функции. Это выполняется только один раз и, похоже, работает хорошо.

13
задан 7 June 2011 в 02:54
поделиться