gpt4 book ai didi

spring - 我似乎无法实现 Spring 的生命周期工作

转载 作者:IT老高 更新时间:2023-10-28 13:57:41 26 4
gpt4 key购买 nike

我需要在 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,然后执行我自己的功能。这只会执行一次,并且似乎运行良好。

最佳答案

两种方法:

  1. 实现 SmartLifecycle而不是 Lifecycle并确保返回 true来自 isAutoStartup() .

  2. 实现 ApplicationListener<ContextRefreshedEvent> .在这种情况下,SmartLifecycle 只有一种方法可以实现,而不是 6 种。 .

关于spring - 我似乎无法实现 Spring 的生命周期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6258774/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com